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

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

사용하지 않는 공간을 0으로 지우는 방법은 무엇입니까? (도구를 찾고 있어요.BTFS파일 시스템)

나는 그 이상을 찾고 있어요

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

좋다FS 아카이버"사용된 공간"을 찾고 있으며 사용되지 않았지만 반대편 사이트는 무시합니다.

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

그런데. ext3, ext4의 경우:0으로 사용되지 않는 공간 지우기(ext3, ext4). 여기서는 btrfs를 요청합니다.

"더 스마트한 알고리즘"에 대한 설명: "더 스마트한 알고리즘"이 혼란을 야기한다고 생각했기 때문에 마침내 여기에 이에 대한 내용을 추가하기로 결정했습니다. 독자 여러분, 파일 시스템을 데이터 구조로 생각하시기 바랍니다. 단순화하기 위해 값이 정수인 관련 키->값 배열 역할을 하는 맵을 보유하는 자체 균형형 레드-블랙 트리를 상상해 보겠습니다. 목표는 모든 음수 값을 0으로 지우는 것입니다. "스마트하지 않은" 알고리즘은 이를 반복하여 키:값 쌍을 새 맵에 추가합니다(결국 음수 값을 0으로 변경). 스마트 알고리즘은 음수 값이 저장된 위치만 감지하고 삭제합니다.제자리에.

답변1

여유 공간을 정리하는 정확하고 "현명한" 방법은 다음을 사용하는 것입니다.

fstrim /mountpoint

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

이렇게 하면 보안상의 이점이 없다는 점은 주목할 가치가 있습니다. 디스크를 안전하게 삭제하려면 파일을 백업하고 "shred" 등의 명령을 사용하여 디스크 전체를 초기화한 후 파일을 복원하세요.

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

답변2

이것은 이전 질문에 대한 내 답변을 수정하고 확장하여 다시 게시한 것입니다.

sfill패키지 에서 secure-delete원하는 것은 무엇이든 할 수 있습니다 .

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

예를 들어

sfill -l -l -z /mnt/X

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

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

"원본" 이미지를 설치하는 것은 간단하고 간단합니다. 이미지 파일을 사용하여 kpartx루프백 장치를 생성하면 각 파티션의 /dev/mapper/ 항목을 개별적으로 마운트할 수 있습니다.

다음은 네트워크 부팅 가능한 freedos 하드 드라이브 이미지를 마운트하는 데 사용하는 스크립트 조각에서 수정된 스크립트의 일부입니다(플래시롬이 작동하지 않는 시스템의 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 이미지). 파티션 중 하나가 스왑 공간인 경우 이는 올바르지 않습니다. 이러한 파티션을 감지하고 dd를 사용하여 스왑 파티션을 0으로 만드는 것은 독자의 연습 문제로 남겨집니다. :)

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

이미지가 qcow인 경우 이미지 파일과 해당 파티션을 네트워크 블록 장치로 렌더링하는 패키지 qemu-nbd의 도구 (예: /dev/nbd0 /dev/ndb0p1)를 사용할 수 있습니다. 이는 /dev/ /와 유사한 방식으로 사용할 수 있습니다. qemu-utils매퍼 장치.

qemu-img위의 raw 방법을 사용하여 qcow에서 raw로 변환한 다음 수정된 raw 이미지를 다시 압축된 qcow2로 변환하는 것이 더 쉽고 덜 번거로울 수 있습니다(그러나 시간이 더 많이 소요됩니다). 그러면 새 qcow2 이미지를 생성할 때 압축하게 되므로 qemu-nbd를 사용하는 것보다 이미지가 약간 더 작아질 수 있습니다.

답변3

cat /dev/zero먼저 압축을 끄면 btrfs에서 작동합니다.

btrfs 속성 설정 PATH 압축 없음

예를 들어:

mkdir -p btrfs-zero
btrfs property set btrfs-zero compression none
cat /dev/zero > btrfs-zero/zero
rm btrfs-zero/zero

가상 머신 이미지에서 이 작업을 수행한 후 일반적인 방법으로 가상 디스크를 "축소"할 수 있습니다.

VMware Fusion을 예로 들어 보겠습니다.

/Applications/VMware\ Fusion.app/Contents/Library/vmware-vdiskmanager -k DISK.vmdk

관련 정보