0으로 사용되지 않은 공간 지우기 (btrfs)


10

사용하지 않는 공간을 0으로 지우는 방법은 무엇입니까? ( btrfs 파일 시스템 도구를 요청 합니다 )

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

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

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

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

Btw. ext3, ext4의 경우 : 사용하지 않는 공간을 0으로 지 웁니다 (ext3, ext4) . 여기에 btrfs를 요청합니다

"스마트 한 알고리즘"에 대한 설명 : "스마트 한 알고리즘"이 혼동을 일으키는 것을 보았을 때, 여기에 마지막으로 추가하기로 결정했습니다. 독자 여러분, 파일 시스템을 데이터 구조로 생각하십시오. 단순화를 위해 값이 정수인 연관 키-> 값 배열로 사용되는 자체 균형 조정 레드-블랙 트리 홀딩 맵을 상상해 봅시다. 목표는 모든 음수 값을 0으로 지우는 것입니다. "스마트하지 않음"알고리즘은이를 반복하고 키 : 값 쌍을 새 맵에 추가합니다 (결과적으로 음수가 0으로 변경됨). 스마트 알고리즘은 음수 값이 저장된 장소 만 감지하여 제자리에서 지 웁니다 .


2
당신은 sfill제안 을 시도 했습니까 ? extX가 필요하지 않은 것 같습니다.
Kevin

1. 파쇄로 기존 파일을 0으로 채울 수 있다는 것을 알고 있지만 그렇지 않습니까? 2. 당신은 어떻게 그 이미지들을 만들고 있습니까? 어쩌면 거기서 잘릴 수 있습니까?
Zlatko

@ kevin : 그래서 원래 질문에 sfill answer을 게시했습니다. 나는 거의 ext2,3,4 파일 시스템을 거의 사용하지 않으므로 ext *에서만 작동하는 유틸리티는 귀찮게 쓸모가 없습니다.
cas

"스마트 한"무언가가 필요합니다. 다른 장소 를 건드리지 않고 빈 공간을 0으로 채우는 것-B-Trees와 같은 내부 데이터 구조에 영향을 미치지 않는 것을 의미합니다. FS와 같은 이미지 분석 및 연구) 중복 드
그르 Wierzowiecki

그냥 사용 truncate및 / 또는fallocate
mikeserv

답변:


4

다음은 이전 질문에 대한 나의 답변에 대한 수정되고 훨씬 확장 된 게시물입니다.

sfillsecure-delete패키지 에서 원하는 것을 할 수 있습니다.

ext2, ext3 및 ext4 파일 시스템에서만 작동하는 zerofree와 달리 sfill은 모든 파일 시스템에서 작동합니다.

예 :

sfill -l -l -z /mnt/X

sfill / secure-delete 홈 페이지는 이제 사라진 것 같지만 데비안과 우분투 용으로 패키지되었습니다. 아마 다른 배포판도. 소스 코드가 필요하다면, 다른 곳에서 찾을 수 없다면 데비안 아카이브에서 찾을 수 있습니다.

참고 : sfill은 마운트 된 파일 시스템에서만 작동합니다. VM이 아닌 호스트 시스템에서 이미지 파일을 0으로 채우는 경우 호스트에 fs 이미지를 마운트해야합니다. 정확한 방법은 이미지 파일의 종류 (예 : qcow2 또는 raw)에 따라 다릅니다.

'원시'이미지 마운트는 쉽고 간단합니다. 그냥 사용kpartx 각 파티션에 대해 루프백 장치는 / dev / 매퍼 / 항목을 만들 수있는 이미지 파일에 다음 개별적으로 장착 할 수 있습니다.

다음은 net-bootable freedos 하드 디스크 이미지를 마운트하는 데 사용하는 스크립트 조각에서 수정 된 부분 스크립트입니다 (flashrom이 작동하지 않는 시스템의 BIOS 업데이트에 사용됨).

image="myrawimagefile.img"

# use kpartx to build /dev/mapper device nodes
KP=$(kpartx -a -v "$image")

# now mount each partition under ./hd/
for p in $(echo "$KP" | awk '/^add map/ {print $3}') ; do
  dm="/dev/mapper/$p"
  fp=$(echo "$p" | sed -r -e 's/^loop[0-9]+//')
  mkdir -p "./hd/$fp"
  mount "$dm" "./hd/$fp"
  sfill -l -l -v "./hd/$fp"
  umount "$dm"
done

# now remove the loopback device and /dev/mapper entries
kpartx -d "$image"

참고 : 이미지의 모든 파티션을 마운트 할 수 있다고 가정합니다. 내 유스 케이스 (하나의 파티션이있는 freedos hd 이미지)에서 true입니다. 파티션 중 하나가 스왑 공간 인 경우에는 해당되지 않습니다. 이러한 파티션을 감지하고 dd를 사용하여 스왑 파티션을 제로화하는 것은 독자의 연습으로 남아 있습니다 :)

이 방법 또는 변형은 LVM 볼륨에서도 작동합니다.

이미지가 qcow 인 qemu-nbd경우qemu-utils 이미지 파일과 해당 파티션을 네트워크 블록 장치로 표시 패키지 예 : / dev / nbd0 / dev / ndb0p1-/와 유사한 방식으로 사용할 수 있음). 위의 dev / mapper 장치.

qemu-imgqcow에서 raw로 변환하고 위의 raw에 대한 방법을 사용한 다음 수정 된 raw 이미지를 다시 압축 된 qcow2로 변환하는 것이 더 쉽고 번거롭지 않지만 시간이 많이 소요 됩니다. 이것은 새로운 qcow2 이미지가 생성 될 때 압축 할 때 qemu-nbd를 사용하는 것보다 약간 더 작은 이미지를 생성 할 것입니다.


1
의미하는 바는 사용되지 않은 공간을 0으로 채우는 "스마트 한" 방법으로 간주 되지 않는다는 것입니다. 가장 분명하고 일반적인 방법입니다. 나는 그런 것들에 대해 묻지 않습니다.
Grzegorz Wierzowiecki

1
특정 파일 시스템 제품군에 고유하지 않은 "스마트" 알고리즘을 설명하십시오 (예 : zerofill은 ext2 / 3 / 4 용). 당신은 일을 할 수있는 프로그램을 원했습니다. 당신은 그것이 마 법적이어야한다고 말하지 않았습니다.
cas

1
그리고 실제로 파일 시스템이 사용 중이 아닌 경우 (예를 들어, 제로 필링을 위해 호스트에 마운트되어 있기 때문에) 알고리즘이 얼마나 똑똑한가? 빈 섹터를 찾는 fs 메타 데이터를 트롤링하는 것은 NUL로 가득 찬 엄청난 양을 작성하는 것보다 빠르거나 나을 것입니다.
cas

2
한편으로, 귀하의 요구에 충분합니다. 그래서 내 질문에는 이미이 솔루션의 코드 스 니펫이 포함되어 있으므로 귀하의 답변은 새로운 것을 제공하지 않습니다. 반면에 내부 구조를 수정하지 않고 사용하지 않는 공간을 0으로 지우고 싶기 때문에 (예 : "Dancing B-Tancings"또는 다른 종류의 데이터 구조 (예 : 분석 및 중복 제거를 위해) 균형 조정) 목적)
Grzegorz Wierzowiecki

2
@cas-VM에서 가상 하드 드라이브를 압축하기 전에 제로 필링이 필수 단계라는 사실을 놓친 것 같습니다. 10GB의 파일과 10GB의 "빈"공간 (예 : 삭제 된 파일)이있는 500GB 확장 디스크가있는 경우 순진한 "거대한 제로 파일"접근 방식을 실행하면 FAR이 더 오래 걸리고 VHD가 최대 전체 500GB OP가 유틸리티도 FS에만 적용되어야 한다고 가정 합니다.
가짜 이름

3

여유 공간을 지우는 올바른 "똑똑한"방법은 다음을 사용하는 것입니다.

fstrim /mountpoint

마운트 된 파일 시스템에서 이것을 사용하십시오.

이것에 대한 보안 이점이 없다는 점에 유의하는 것이 중요합니다. 보안을 위해 디스크를 지우려면 파일을 백업하고 "파쇄"와 같은 명령으로 전체 디스크를 0으로 만든 다음 파일을 복원하십시오.

그러나 디스크가 스파 스 파일 시스템에서 씬 프로비저닝이고 사용되지 않은 공간을 복구하려는 경우 솔루션이 제대로 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.