it-swarm-korea.com

Linux에서 사용 가능한 디스크 공간을 지우는 방법은 무엇입니까?

파일이 삭제되면 명시 적으로 다른 것으로 덮어 쓰지 않는 한 그 내용이 파일 시스템에 남아있을 수 있습니다. wipe 명령은 파일을 안전하게 지울 수 있지만 파일에서 사용하지 않는 디스크 여유 공간을 지우는 것을 허용하지 않습니다.

이를 위해 무엇을 사용해야합니까?

142
Alex B

현대의 디스크/SSD 하드웨어와 현대 파일 시스템은 장소의 데이터를 다람쥐로 만들 수 있습니다. 경고 :여기서 삭제할 수 없기 때문에이 프로세스는 여전히 디스크에 데이터를 남길 수 있습니다. 데이터를 지우는 유일한 안전한 방법은 ATA 보안 지우기 명령 (올바르게 구현 된 경우) 또는 물리적 파기입니다. 또한 참조 어떻게 하드 드라이브의 모든 정보를 안정적으로 지울 수 있습니까?

보안 삭제라는 도구 모음을 사용할 수 있습니다.

Sudo apt-get install secure-delete

여기에는 네 가지 도구가 있습니다.

srm - 기존 파일을 안전하게 삭제합니다.
smem - RAM에서 파일의 흔적을 안전하게 지 웁니다.
sfill - 하드 드라이브에서 빈 것으로 표시된 모든 공간을 지 웁니다.
sswap - 스왑 공간의 모든 데이터를 지 웁니다.

srm의 맨 페이지에서

srm은 도둑, 법 집행 기관 또는 기타 위협으로 복구 할 수없는 안전한 방식으로 매체의 데이터를 삭제하도록 설계되었습니다. 와이프 알고리즘은 최고의 민간 암호 작성자 중 한 명인 피터 구트 만 (Peter Gutmann)에 의한 6 번째 Usenix 보안 심포지엄에서 발표 된 "자기 및 솔리드 스테이트 메모리에서 데이터의 안전한 삭제"라는 논문을 기반으로합니다.

Srm의 보안 데이터 삭제 프로세스는 다음과 같습니다.

  • 0xff로 1 회 통과
  • 5 번의 랜덤 패스. /dev/urandom는 사용 가능한 경우 보안 RNG에 사용됩니다.
  • Peter Gutmann이 정의한 특수 값이있는 27 개의 패스.
  • 5 번의 랜덤 패스. /dev/urandom는 사용 가능한 경우 보안 RNG에 사용됩니다.
  • 파일의 이름을 임의의 값으로 바꿉니다.
  • 파일 자르기

추가 보안 수단으로 파일이 O_SYNC 모드로 열리고 각 패스 후에 fsync() 호출이 수행됩니다. srm은 디스크 캐시의 버퍼를 채우고 파일에 속한 이전 데이터를 플러시하고 덮어 쓰도록 32K 블록의 속도로 씁니다.

105
fnord_ix

단일 패스 만 필요하고 모든 것을 0으로 바꾸려는 경우 가장 빠른 방법은 다음과 같습니다.

cat /dev/zero > zero.file
sync
rm zero.file

(지울 파일 시스템의 디렉토리에서 실행)
(sync 명령은 모든 데이터가 디스크에 기록되도록하는 편집증 조치입니다. 지능형 캐시 관리자는 파일이 링크 해제 될 때 보류중인 블록에 대한 쓰기를 취소 할 수 있도록 조치 할 수 있습니다)

파일 시스템에 여유 공간이 전혀 없을 때이 작업을 수행하는 데 시간이 걸립니다. 결과 파일이 크거나 조각화 된 경우 수십 초가 걸릴 수 있으므로 삭제하는 데 시간이 걸립니다. 여유 공간이 완전히 0 인 시간을 줄이려면 다음을 수행하십시오.

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
cat /dev/zero > zero.file
sync
rm zero.small.file
rm zero.file

값 비싼 법 의학적 조작없이 누군가가 오래된 파일 내용을 읽는 것을 막기에 충분해야합니다. 약간 더 안전하지만 느리게 변형하려면 /dev/zero/dev/urandom로 바꾸십시오. 더 많은 편집증을 위해 /dev/urandom로 여러 단계를 실행하십시오.하지만 많은 노력이 필요한 경우 coreutils 패키지의 shred 유틸리티를 사용하는 것이 좋습니다.

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
shred -z zero.small.file
cat /dev/zero > zero.file
sync
rm zero.small.file
shred -z zero.file
sync
rm zero.file

위의 작은 파일은 더 큰 파일을 만들기 전에 파쇄되므로 큰 파일이 파쇄 될 때까지 기다리지 않고 파일 시스템에 여유 공간이없는 상태에서 파일 시스템을 남겨 두는 대신 큰 파일이 완성되 자마자 제거 할 수 있습니다. 큰 파일에 대해 long 시간이 걸리는 파쇄 프로세스는 NSA에서 무언가를 숨기려고하지 않는 한 실제로 필요한 IMO가 아닙니다.

위의 모든 파일 시스템에서 작동해야합니다.

파일 크기 제한 :

DanMoulding이 아래 주석에서 지적한 것처럼 일부 파일 시스템에서 파일 크기 제한에 문제가있을 수 있습니다.

FAT32의 경우 2GiB 파일 제한으로 인해 definitely이 문제가됩니다. 요즘 대부분의 볼륨은 이보다 큽니다 (8TiB는 볼륨 크기 제한 IIRC입니다). split을 통해 큰 cat /dev/zero 출력 출력을 파이핑하여 여러 개의 작은 파일을 생성하고 그에 따라 파쇄 ​​및 삭제 단계를 조정하면이 문제를 해결할 수 있습니다.

Ext2/3/4를 사용하면 걱정할 필요가 없습니다. 기본/공통 4K 블록의 경우 파일 크기 제한은 2TiB이므로 문제가 되려면 huge 볼륨이 있어야합니다 ( 이 조건에서 최대 볼륨 크기는 16TiB입니다).

(여전히 실험적인) btrfs를 사용하면 최대 파일 및 볼륨 크기는 모두 16EiB입니다.

NTFS에서는 최대 파일 길이가 최대 볼륨 길이보다 큰 경우도 있습니다.

자세한 정보의 시작점 :
http://en.wikipedia.org/wiki/Ext3#Size_limits
http://en.wikipedia.org/wiki/Btrfs
http://en.wikipedia.org/wiki/Ntfs#Scalability

가상 장치

최근 의견에서 언급했듯이 가상 장치에 대한 추가 고려 사항이 있습니다.

  • 드물게 할당 된 가상 디스크의 경우 zerofree에서 사용하는 것과 같은 다른 방법이 더 빠릅니다 (catdd와는 달리이 도구는 표준 도구가 아닙니다. 유닉스와 같은 OS).

  • 희소 가상 장치의 블록을 0으로 설정하면 기본 physical 장치의 블록이 지워지지 않을 수 있습니다. 실제로 가상 디스크 관리자는 블록을 더 이상 사용하지 않도록하여 나중에 다른 것으로 할당 할 수 있도록합니다.

  • 고정 크기 가상 장치의 경우에도 장치의 물리적 위치를 제어 할 수 없으므로 언제든지 현재 위치를 중심으로 또는 새로운 물리 디스크 세트로 이동할 수 있으며 가장 많이 닦을 수있는 것은 현재 위치가 아닙니다. 과거에 블록이 있었던 이전 위치.

  • 위의 가상 장치 문제 : 호스트를 제어하고 나중에 VM에서 디스크를 지우거나 가상 장치를 이동 한 후 할당되지 않은 공간을 안전하게 지울 수 없다면 사실 후에 이것을 할 수 있습니다. 유일한 해결책은 전체 디스크 암호화를 사용하는 것입니다. 처음부터 따라서 암호화되지 않은 것은 처음에는 실제 미디어에 기록되지 않습니다. 물론 VM 내에 여유 공간 지우기가 여전히 필요할 수 있습니다. 또한 가상화 계층에서 사용되지 않는 블록을 실제로 볼 수 없으므로 FDE는 스파 스 가상 장치의 유용성을 떨어 뜨릴 수 있습니다. OS의 파일 시스템 계층이 가상 장치에 트림 명령을 전송하고 (SSD 인 경우) 가상 컨트롤러가이를 해석하면이 문제를 해결할 수는 있지만 실제로 이러한 상황이 더 넓은 상황은 알 수 없습니다. 그 문제에 대한 논의는 다른 곳의 문제입니다 (원래 질문에 대한 주제에서 벗어나는 것에 가까워지고 있으므로 관심을 끌면 몇 가지 실험 및/또는 후속 질문이 순서대로 표시 될 수 있습니다).

70
David Spillett

경고

얼마나 많은 파일 photorec 이 내 디스크에서 닦아 낸 후에도 검색 할 수 있다는 것에 충격을 받았습니다.

"여유 공간"을 0x00으로 한 번만 채우거나 다른 카바 론적 표준을 사용하여 38 번 채우는 데 더 많은 보안이 필요한지는 학문적 인 논의입니다. 1996 년 세미나 논문의 저자는 현대 하드웨어에 쓸모없고 쓸모 없다고 말하면서 에필로그 를 썼다. 물리적으로 0으로 대체되고 이후에 복구 된 데이터에 대한 문서화 된 사례는 없습니다.

이 절차에서 실제 깨지기 쉬운 링크 파일 시스템 입니다. 일부 파일 시스템은 특별한 사용을위한 공간을 예약하고 "여유 공간"으로 사용할 수 없습니다. 그러나 귀하의 데이터가있을 수 있습니다 . 여기에는 사진, 개인 텍스트 이메일 등이 포함됩니다. 난 그냥 예약 된 공간 + ext4 봤는데 내 home 파티션의 5 %가 예약 된 배웠습니다. 나는 photorec이 내 물건을 많이 찾은 곳이라고 생각한다. 결론 : 파쇄 방법이 가장 중요하지 않습니다. 다중 패스 방법조차도 여전히 데이터를 제자리에 남겨 둡니다 .

마운트하기 전에 # tune2fs -m 0 /dev/sdn0를 시도 할 수 있습니다. (재부팅 후 루트 파티션이되는 경우 마운트 해제 한 후 -m 5 또는 -m 1를 실행하십시오.).

그러나 여전히, 어떤 방법 으로든 어떤 공간이 남을 수 있습니다.

유일하게 진정한 안전한 방법은 전체 파티션을 지우고 파일 시스템을 다시 생성 한 다음 백업에서 파일을 복원하는 것입니다.


빠른 길 (권장)

지울 파일 시스템의 디렉토리에서 실행 :

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
dd if=/dev/zero of=zero.file bs=1024
sync ; sleep 60 ; sync
rm zero.small.file
rm zero.file

메모 : 작은 파일의 목적은 여유 공간이 완전히 0 인 시간을 줄이는 것입니다. 동기화의 목적은 데이터가 실제로 쓰여지는지 확인하는 것입니다.

이것은 대부분의 사람들에게 충분해야합니다.

천천히 (편집증)

위의 청소 후에 복구되는 데이터에 대한 문서화 된 사례는 없습니다. 가능한 경우 비용이 많이 들고 자원이 필요할 것입니다.

그러나 비밀 기관이 파일을 복구하는 데 많은 자원을 소비한다고 생각하는 이유가 있다면 충분할 것입니다.

dd if=/dev/urandom of=random.small.file bs=1024 count=102400
dd if=/dev/urandom of=random.file bs=1024
sync ; sleep 60 ; sync
rm random.small.file
rm random.file

시간이 오래 걸립니다.

경고. 편집증 환자를 선택했다면,이 후에도 빠른 닦아주기를 원할 것입니다. 그것은 편집증이 아닙니다. 순전히 무작위적인 데이터의 존재는 탐지하기 쉽고 저렴하며 실제로 암호화 된 데이터라는 의혹을 불러 일으 킵니다. 암호 해독 키를 공개하지 않으려면 고문으로 사망 할 수 있습니다.

아주 천천히 (미친 편집증)

1996 년의 분쇄에 관한 논문의 저자조차도 현대의 하드웨어에는 쓸모없고 쓸모 없다고 말하는 에필로그를 썼다.

그러나 아직 여가 시간이 많고 덮어 쓰기가 많은 디스크를 낭비하지 않으시면됩니다.

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
sync ; sleep 60 ; sync
shred -z zero.small.file
dd if=/dev/zero of=zero.file bs=1024
sync ; sleep 60 ; sync
rm zero.small.file
shred -z zero.file
sync ; sleep 60 ; sync
rm zero.file

주의 : 이것은 기본적으로 보안 삭제 도구를 사용하는 것과 같습니다.


편집하기 전에,이 게시물은 데이비드 Spillett의 재작 성했습니다. "cat"명령은 오류 메시지를 생성하지만 다른 사람들의 게시물에 의견을 쓸 수 없습니다.

44
user39559

적어도 우분투에는 zerofree 유틸리티가 있습니다.

http://manpages.ubuntu.com/manpages/natty/man8/zerofree.8.html

   zerofree — zero free blocks from ext2/3 file-systems

   zerofree  finds  the  unallocated, non-zeroed blocks in an ext2 or ext3
   filesystem (e.g. /dev/hda1) and fills them with zeroes. This is  useful
   if  the  device  on  which this file-system resides is a disk image. In
   this case, depending on the type of disk image, a secondary utility may
   be  able  to  reduce the size of the disk image after zerofree has been
   run.

   The usual way to achieve  the  same  result  (zeroing  the  unallocated
   blocks)  is to run dd (1) to create a file full of zeroes that takes up
   the entire free space on the drive, and then delete this file. This has
   many disadvantages, which zerofree alleviates:

      ·  it is slow;

      ·  it makes the disk image (temporarily) grow to its maximal extent;

      ·  it  (temporarily)  uses  all  free  space  on  the disk, so other
         concurrent write actions may fail.

   filesystem has to be unmounted or mounted  read-only  for  zerofree  to
   work.  It  will exit with an error message if the filesystem is mounted
   writable. To remount the  root  file-system  readonly,  you  can  first
   switch to single user runlevel (telinit 1) then use mount -o remount,ro
   filesystem.

또한 zerofree에 대한이 링크를 확인하십시오 : 파일 시스템 이미지를 희소하게 유지하십시오 - 저자의 글입니다 - Ron Yorston (2012 년 8 월 9 일)

27
osgx

다음은 GUI로 수행하는 방법입니다.

  1. 설치 BleachBit
  2. 응용 프로그램 - 시스템 도구 - BleachBit을 관리자로 클릭하여 루트로 실행하십시오.
  3. 환경 설정에서 원하는 경로를 지정하십시오. 일반적으로 잘 추측합니다. 각 파티션에 쓰기 가능한 경로를 하나 포함하고 싶습니다. 일반적으로/home/username과/tmp는 같은 파티션이 아니라면 하나의 파티션 만 선택하십시오.
  4. 시스템 - 여유 디스크 공간 정리 상자를 선택하십시오.
  5. 삭제를 클릭하십시오.

Dd (BleachBit)는 디스크가 마침내 가득 차면 BleachBit은 파일 이름과 같은 메타 데이터가 들어있는 inode를 지우는 작은 파일을 만듭니다.

3
Andrew Z

보안 삭제 패키지를 사용하여 여유 공간을 지울 수 있습니다.

해당 패키지에서 sfill 도구를 찾을 수 있습니다.이 도구는 도둑, 법 집행 기관 또는 기타 위협으로 복구 할 수없는 안전한 방식으로 사용 가능한 디스크 공간에있는 데이터를 삭제하도록 설계되었습니다.

Linux (Ubuntu)에서 보안 삭제 패키지를 설치하려면 다음 명령을 사용하여 설치하십시오.

$ Sudo apt-get install secure-delete

그런 다음 사용 가능한 공간이없는 데이터를 지우려면 다음 명령을 시도하십시오.

sfill -f -v -ll /YOUR_MOUNTPOINT/OR_DIRECTORY

여기서/YOUR_MOUNTPOINT/OR_DIRECTORY는 여유 공간을 지우기위한 마운트 지점 (df -h, mount) 또는 디렉토리입니다.

매뉴얼 http://manpages.ubuntu.com/manpages/hardy/man1/sfill.1.html 을 읽으십시오.

2
kenorb

드라이브를 최고 속도로 닦으십시오.

요즘 드라이브를 암호화하는 일반적인 지침은 드라이브를 먼저 지우라고 알려줍니다.

아래 명령은 드라이브에 AES 암호문을 채 웁니다.

기본 부팅 드라이브를 정리해야하는 경우 라이브 CD를 사용하십시오.

터미널을 열고 권한을 높이십시오.

Sudo bash

시스템의 모든 드라이브를 안전하게 나열하십시오.

cat /proc/partitions

참고 : 닦으려는 장치로 /dev/sd{x}를 바꾸십시오.

경고 : 이것은 아마추어를위한 것이 아닙니다! 시스템을 부팅 할 수 없게 만들 수 있습니다 !!!

Sudo openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero > /dev/sd{x}

나는 이것이 얼마나 빠르지에 놀랐다.

2
Roger Lawhorn

dd을 사용하여 여유 공간을 채우기 위해 하나 이상의 큰 파일을 할당 한 다음 안전한 삭제 유틸리티를 사용합니다.

Dd try로 파일을 할당하려면 :

dd if=/dev/zero of=delete_me bs=1024 count=102400

그러면 크기가 100MB 인 delete_me라는 파일이 생성됩니다. 여기서 bs은 "블록 크기"를 1k로 설정하고 count은 할당 할 블록 수입니다.

그런 다음 자주 사용하는 보안 삭제 유틸리티 (예 : shred )를 사용하여 만든 파일에 사용하십시오.

그러나 참고 :버퍼링은 전체 디스크를 수행하더라도 절대적으로 모든 것을 얻을 수 없다는 것을 의미합니다!


링크 추천 scrub 여유 공간 닦기. 그것을 시도하지 않았습니다.

2
dmckee

시스템에 이미 GNU coreutils 패키지 가 설치되어있을 것입니다. 명령 을 분쇄 합니다.

2
dkaylor

스크럽 을 사용하는 것이 더 쉽습니다.

scrub -X dump

이렇게하면 현재 위치에 dump 폴더가 만들어지고 디스크가 가득 찰 때까지 파일이 만들어집니다. -p 옵션 (nnsa|dod|bsi|old|fastold|gutmann)을 사용하여 패턴을 선택할 수 있습니다.

스크럽을 설치하는 것은 쉽지 않습니다 ( 에서 우분투 포럼을 참조하십시오.) 일단 설치가 완료되면 정말 간단하고 효율적인 도구를 사용할 수 있습니다 당신의 손에.

1
FMaz008

Linux와 MacOS에서 작동하는 간단한 솔루션을 발견했습니다. 디스크의 루트 폴더로 이동하여 다음 명령을 실행하십시오.

for i in $(seq 1 //DISKSPACE//); do dd if=/dev/zero of=emptyfile${i} bs=1024 count=1048576; done; rm emptyfile*;

여기서 // DISKSPACE //는 하드 디스크의 크기 (GB)입니다.

1
Enrico

dd를 사용하고 여유 공간을 0으로 만드십시오. 그것은 신화 데이터가 여러 번 (그냥 피터 guntmann을 물어) 이상 무작위 데이터, 1에 반대하는 0의 부 자연스러운 활동을 의미해야합니다. 최종 결과는 쓰는 데 드는 시간이 적은 깨끗한 드라이브입니다. 게다가 안전한 삭제 프로그램은 최신 파일 시스템 (저널링 된)의 실제 파일을 덮어 쓰기까지합니다. 자신에게 호의를 베풀고 photorec를 얻고, 드라이브를 스캔하여 엉망진창을보고, 1로 그리고 선택적으로 0으로 닦아서 손질하지 마십시오. 포토 코어가 여전히 물건을 발견한다면, 사용 가능한 모든 것을 스캐닝한다는 것을 기억하십시오. 따라서 루트 사용자와 함께 신중하게 다시하십시오.

cia/fbi/nsa에는 자기 미디어 비트의 실제 상태를 읽을 수있는 멋진 머신이 없다는 것을 기억하십시오. 그건 오래전에 작성된 모든 종이였습니다. "what-if". 1 시간 만 닦아야합니다.

1
fred

다음은 내가 사용하는 "sdelete.sh"스크립트입니다. 자세한 내용은 의견보기.

# Install the secure-delete package (sfill command).

# To see progress type in new terminal:
# watch -n 1 df -hm

# Assuming that there is one partition (/dev/sda1). sfill writes to /.
# The second pass writes in current directory and synchronizes data.
# If you have a swap partition then disable it by editing /etc/fstab
# and use "sswap" or similar to wipe it out.

# Some filesystems such as ext4 reserve 5% of disk space
# for special use, for example for the /home directory.
# In such case sfill won't wipe out that free space. You
# can remove that reserved space with the tune2fs command.
# See http://superuser.com/a/150757
# and https://www.google.com/search?q=reserved+space+ext4+sfill

Sudo tune2fs -m 0 /dev/sda1
Sudo tune2fs -l /dev/sda1 | grep 'Reserved block count'

Sudo sfill -vfllz /

# sfill with the -f (fast) option won't synchronize the data to
# make sure that all was actually written. Without the fast option
# it is way too slow, so doing another pass in some other way with
# synchronization. Unfortunately this does not seem to be perfect,
# as I've watched free space by running the "watch -n 1 df -hm"
# command and I could see that there was still some available space
# left (tested on a SSD drive).

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
dd if=/dev/zero of=zero.file bs=1024
sync ; sleep 60 ; sync
rm zero.small.file
rm zero.file

Sudo tune2fs -m 5 /dev/sda1
Sudo tune2fs -l /dev/sda1 | grep 'Reserved block count'
1
Czarek Tomczak

이것은 대답이 아닙니다! pv...을 사용하고자하는 사람들을위한 주석은 투표를 귀찮게하지 않습니다.

Linux Mint 17.3 에서는 pv ( pipe view )를 사용하여 글쓰기의 진행 상황을 알 수 있습니다. 예 :

# Install pv (pipe view)
Sudo apt-get install pv

# Write huge file of approximate size of /dev/sdb, using urandom data:
pv --timer --average-rate --progress --numeric --eta --interval 5 --size "$(blockdev --getsize64 /dev/sda )" /dev/urandom >Rand.file

이점은 진행률 표시 줄, 도착 시간 및 지속적으로 업데이트되는 데이터 속도를 얻는 것입니다. 단점은 이것이 한 줄에 쓰여지고 디스크가 꽉 찼을 때 (오류를 반환하면) 사라지는 것입니다. 이것은 특히 OS 볼륨에서이 매우 긴 작업이 진행되는 동안 OS가 디스크를 사용하기 때문에 전체 크기가 근사치이기 때문에 발생합니다.

아주 오래된 HD에서 저는 /dev/urandom와 약 를 사용하여 13 MB/s 의 데이터 전송률을 얻었습니다 70 MB/s , /dev/zero를 사용할 때. dd이 아닌 원시 cat 또는 pv을 사용하면이 기능이 향상됩니다.

0
not2qubit

나는 때때로이 bash one-liner를 사용한다.

while :; do cat /dev/zero > zero.$RANDOM; done

디스크가 꽉 찼다는 말을 시작하면 Ctrl+C 생성 된 zero.* 파일을 제거하십시오.

파일 크기 제한에 관계없이 모든 시스템에서 작동합니다.
cat: write error: File too large 오류는 무시하십시오.

0
Nicolas Raoul