Ext4 파티션의 여유 공간 이미지를 만드는 방법은 무엇입니까?
예: 10GB 파티션에는 5GB 할당 파일이 있고 나머지 5GB 여유/할당되지 않은 공간/데이터의 원시 이미지를 만들어야 합니다.
답변1
이를 사용하여 쉽게 구문 분석할 수 있는 형식으로 목록을 얻을 수 있습니다 dumpe2fs -x /dev/your_partition
.Free blocks
# preparation
truncate -s 100M ext4.img
mkfs.ext4 ext4.img
partition=ext4.img
# test
dumpe2fs -x "${partition}"
생산하다
…
Free blocks: 0x00014001-0x00016000
Free inodes: 0x00004d31-0x000054e8
Group 11: (Blocks 0x00016001-0x00018000) csum 0xd1b4 [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
Block bitmap at 0x0000010e (bg #0 + 269), csum 0x00000000
Inode bitmap at 0x0000011b (bg #0 + 282), csum 0x00000000
Inode table at 0x00000bba-0x00000cb0 (bg #0 + 3001)
8192 free blocks, 1976 free inodes, 0 directories, 1976 unused inodes
Free blocks: 0x00016001-0x00018000
Free inodes: 0x000054e9-0x00005ca0
Group 12: (Blocks 0x00018001-0x00018fff) csum 0xa94e [INODE_UNINIT, ITABLE_ZEROED]
…
이런 식으로 우리는 할 수 있습니다
# preparation
truncate -s 100M ext4.img
mkfs.ext4 ext4.img
partition=ext4.img
targetdir=unused_blocks
# dump, filter
dump=$(dumpe2fs -x "${partition}")
blocksize=$(( $(echo "${dump}" | sed -n 's/Block size: *\(.*\)$/\1/p') ))
echo "Block Size ${blocksize}"
freeblocks=$(echo "${dump}" | sed -n 's/ \+Free blocks: \(.\+\)$/\1/p')
mkdir "${targetdir}"
totalsize=0
for blockrange in ${freeblocks}; do
beginning=$(( "${blockrange%-*}" ))
ending=$(( "${blockrange##*-}" ))
length=$(( ${ending} - ${beginning} + 1 ))
echo "Block found: ${blockrange} start ${beginning} (${blockrange%-*}) end ${ending} (${blockrange##*-}) length ${length}"
dd "if=${partition}" "of=${targetdir}/${blockrange}.img" "bs=${blocksize}" "skip=${beginning}" "count=${length}"
totalsize=$(( ${totalsize} + ${length} ))
done
echo "total size: ${totalsize}"
이러한 무료 블록의 원본 이미지가 포함된 블록 표시 범위로 가득 찬 디렉터리를 가져옵니다.
많은 저장 장치(주로 SSD이지만 파티션이 실제로 LVM 씬 볼륨인지 Ceph 블록 저장 장치인지는 알 수 없음)에는 데이터가 전혀 없습니다. discard
ext4가 수행하는 작업(및 대부분의 이러한 장치) 요즘 다른 파일 시스템) 지원을 통해 기본 저장 장치에 이러한 블록의 데이터를 마음대로 실제로 삭제하도록 지시할 수 있습니다. 즉, 블록에 액세스하려고 할 때 블록이 0이 되도록 효과적으로 만들 수 있습니다.
드물게 단일 항목과 쉼표, 범위가 포함된 "Free Block:" 항목이 있을 수 있다는 사실을 발견했습니다. 이를 위해서는 구문 분석을 추가해야 합니다...