사용하지 않는 공간을 0으로 지우십시오 (ext3, ext4)


73

사용하지 않는 공간을 0으로 지우는 방법은 무엇입니까? (ext3, ext4)

더 똑똑한 것을 찾고 있습니다

cat /dev/zero > /mnt/X/big_zero ; sync; rm /mnt/X/big_zero

마찬가지로 FSArchiver는 "사용 된 공간"을 찾고되지 않는를 무시하지만 반대 사이트입니다.

목적 : 파티션 이미지를 압축하고 싶습니다. 사용하지 않는 공간을 0으로 채우는 것이 좋습니다.

Btw. btrfs의 경우 : 사용되지 않은 공간을 0으로 정리하십시오 (btrfs)


4
이것을 확인하십시오 : superuser.com/questions/19326/…
Mat

1
두 가지 다른 종류의 대답이 가능합니다. 당신은 무엇을 달성하려고합니까? 어느 한) 그 데이터를 읽을 사람을 금지하거나하여 보안, 2) 전체 파티션의 압축 또는 [SSD 성능 (최적화 en.wikipedia.org/wiki/Trim_(computing를) ?
Totor

답변:


77

이러한 유틸리티는 zerofree입니다.

설명에서 :

Zerofree는 ext2 또는 ext3 파일 시스템에서 할당되지 않은 0이 아닌 블록을 찾아 0으로 채 웁니다. 이 파일 시스템이있는 장치가 디스크 이미지 인 경우에 유용합니다. 이 경우 디스크 이미지의 유형에 따라 zerofree를 실행 한 후 보조 유틸리티가 디스크 이미지의 크기를 줄일 수 있습니다. Zerofree를 사용하려면 파일 시스템을 마운트 해제하거나 읽기 전용으로 마운트해야합니다.

동일한 결과를 얻는 일반적인 방법 (사용하지 않는 블록 제로화)은 "dd"를 실행하여 드라이브의 전체 여유 공간을 차지하는 0으로 가득 찬 파일을 만든 다음이 파일을 삭제하는 것입니다. 이것은 많은 단점이 있으며, 제로 프리는 다음을 완화합니다.

  • 느리다
  • 디스크 이미지를 (임시로) 최대한 확장시킵니다
  • 디스크의 모든 여유 공간을 (일시적으로) 사용하므로 다른 동시 쓰기 작업이 실패 할 수 있습니다.

Zerofree는 가상 머신 내에 게스트 OS로 설치된 GNU / Linux 시스템에서 실행되도록 작성되었습니다. 이것이 사실이 아니라면,이 패키지가 필요 없을 것입니다.

업데이트 # 1

.deb 패키지에 대한 설명에는 다음 단락이 포함되어 있으므로 ext4에서도 잘 작동합니다.

설명 : ext2, ext3 및 ext4 파일 시스템에서 사용 가능한 블록 없음 Zerofree는 ext2, ext3 또는 ext4 파일 시스템에서 값이 0이 아닌 내용을 가진 할당되지 않은 블록을 찾아서 0으로 채 웁니다.

다른 용도

이 유틸리티의 다른 응용 프로그램은 실제 디스크의 백업 인 디스크 이미지를 압축하는 것입니다. 전형적인 예는 BeagleBone 또는 Raspberry Pi에 SD 카드를 덤프하는 것입니다. 빈 공간이 0이되면 백업 이미지를보다 효율적으로 압축 할 수 있습니다.


1
도구 intgat.tigress.co.uk/rmy/uml/index.html 의 공식 페이지 입니까? ext4와 함께 사용하는 것이 안전하다고 생각하십니까?
Grzegorz Wierzowiecki

2
@GrzegorzWierzowiecki : 그렇습니다, 그것은 페이지이지만, 데비안과 친구들을 위해 이미 repos에 있습니다. 가상 디스크의 ext4 파티션에서 디스크 파일 이미지를 연속적으로 축소하는 데 사용했지만 아무런 문제가 없었습니다.
enzotib

1
dd마운트 된 파일 시스템에서는 작동하지 않으므로 원래 질문 의 조잡한 방법 과 동일 하지 않습니다.
jlh

zerofree 페이지 는 "filesystem은 zerofree 옵션으로 마운트되어"삭제 된 파일을 항상 지속적으로 제로화 할 수있는 패치에 대해 설명합니다. 커널을 다시 컴파일해야합니까? 같은 일을 더 쉽게 수행 할 수있는 방법이 있습니까?
endolith

2
조심하라 zerofree-Astralinux (데비안 기반)에서 ext4 파일 시스템을 잃어 버렸다 …
Hubbitus

33

ext2 / ext3 / ext4에서 사용되지 않은 공간을 지우는 방법 (이 질문 및 다른 곳에서 언급 한 것처럼) 요약 :

사용하지 않는 공간 제로화

파일 시스템이 마운트되지 않았습니다

  • 파일 시스템의 "디스크"가 씬 프로비저닝 된 경우 (예 : 형식이 sparseness를 지원하는 VM 파일 인 TRIM을 지원하는 최신 SSD) 커널에서 블록 장치가이를 이해한다고 말하면 사용 e2fsck -E discard src_fs하지 않는 공간을 버릴 수 있습니다 (e2fsprogs 필요) 1.42.2 이상).
  • 사용 되지 않는 블록 위에 0을 명시 적으로 기록하기 위해 zerofree를 사용 하십시오 (예 :)zerofree src_fs .
  • 사용중인 e2image -rap src_fs dest_fs블록 만 복사하는 데 사용 (새 파일 시스템은 0이 아닌 "디스크"에 있어야하며 e2fsprogs 1.42.9 이상이 필요합니다).

파일 시스템이 마운트되었습니다

  • 파일 시스템의 "디스크"가 씬 프로비저닝 된 경우 (예 : 형식이 sparseness를 지원하는 VM 파일 인 TRIM을 지원하는 최신 SSD) 커널은 블록 장치가이를 이해하고 마지막으로 ext 파일 시스템 드라이버가이를 지원한다고 말합니다 fstrim /mnt/fs/파일 시스템에 사용되지 않은 공간을 삭제하도록 요청하십시오.
  • 사용 cat /dev/zero > /mnt/fs/zeros; sync; rm /mnt/fs/zeros( sfill에서 보안 - 삭제하는 것은이 기술을 사용합니다). 이 방법은 비효율적이며 Ted Ts'o (ext4의 저자)가 권장하지 않으며 특정 사항을 제로로 만들지 않을 수 있으며 미래 속도를 늦출 수 있습니다 fsck.

파일 시스템을 마운트 해제하면 마운트하는 것보다 더 나은 결과를 얻을 수 있습니다. 폐기는 이전에 사용 된 공간을 많이 제로화해야 할 때 가장 빠른 방법 인 경향이 있지만 zerofree폐기 프로세스 후에 사용 하면 때때로 "디스크"에서 폐기가 구현되는 방식에 따라 약간 씩 추가 될 수 있습니다.

이미지 파일을 작게 만들기

이미지가 전용 VM 형식입니다

qemu-img convert src_image dst_image0으로 채워진 공간을 회수하고 이미지를 나타내는 파일이 작아 지려면 적절한 디스크 이미지 도구 (예 :)를 사용해야합니다.

이미지는 원시 파일입니다

다음 기술 중 하나를 사용하여 파일을 스파 스로 만들 수 있습니다 (따라서 공간을 차지하지 않는 실행 중지).

  • cp --sparse=always src_image dst_image.
  • fallocate -d src_image (util-linux v2.25 이상 필요)

요즘 virt-sparsify 와 같은 도구를 사용하여 이러한 단계를 한 번에 더 쉽게 수행 할 수 있습니다.

 출처


15

sfill에서 보안-삭제 이 여러 기타 관련 작업을 할 수 있습니다.

예 :

sfill -l -l -z /mnt/X

업데이트 # 1

github의 ArchLinux 프로젝트에서 사용되는 것으로 보이는 소스 트리가 있으며 sfillSecure-Delete 패키지에 포함 된 도구가 포함 된 소스를 포함합니다 .

또한 sfill의 매뉴얼 페이지 사본 은 다음과 같습니다.


해당 URL은 더 이상 사용되지 않습니다. 홈 페이지가 어디에 있는지 (또는 여전히 홈 페이지가 있더라도) 알 수 없지만 데비안 및 우분투 용으로 패키지되어 있습니다. 아마 다른 배포판도. 소스 코드가 필요하다면, 다른 곳에서 찾을 수 없다면 데비안 아카이브에서 찾을 수 있습니다.
cas

더 이상 사용되지 않는 맨 페이지 URL이 수정되었습니다. "Digipedia"가 더 이상없는 것 같습니다.
mwfearnley

8

e2fsprogs 1.42.9가 e2image있는 경우 처음에 여유 공간없이 파티션 이미지를 작성하는 데 사용할 수 있으므로 제로화 단계를 건너 뛸 수 있습니다.


이 매개 변수에 대한 온라인 정보를 쉽게 찾을 수는 없지만 1.42.9 릴리스 노트에 실제로 나와 있습니다. e2fsprogs.sf.net/e2fsprogs-release.html#1.42.9
mwfearnley

1
그것은 귀중한 도구입니다! 그러나 사용법을 설명하면 대답이 더 좋습니다. 그것은이다 e2image -ar /dev/foo1 | gzip > fs.img.gz, 또는 변화를 포함한다. -f마운트 된 fs에서 사용하도록 포함하십시오 .
marcelm


0

추가 도구에 의존하지 않으려면이 방법이 다음보다 빠릅니다 cat /dev/zero > /mnt/fs/zeros.

dd if=/dev/zero of="/mnt/fs/filler" bs=10485760
dd if=/dev/zero of="/mnt/fs/filler1" bs=1
rm /mnt/fs/filler
rm /mnt/fs/filler1

왜 그것보다 빠를 cat까요? (아니요, 블록 크기 인수는 dd도움 이 되지 않습니다)
marcelm


2
예,하지만 dd더 빠르지 는 않습니다 . 실제로, 아마도 cat더 빨라질 것입니다. 블록 크기는 시스템 호출의 오버 헤드를 최소화하고 CPU 캐시 사용을 최적화하기 위해서만 중요합니다. syscall 오버 헤드로 수익 감소 영역을 입력합니다. 캐시가 1MiB 이상으로 손상되기 시작합니다. 그리고 실제 디스크에서 작업 할 때는 어쨌든 I / O가 바인딩되어 있으며 요점은 대부분 약점입니다. 직접 벤치마킹 해보십시오.
marcelm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.