압축 수준Mksquashfs

압축 수준Mksquashfs

여기서 나는 squashfs 파일 시스템을 만들려고 시도하지만 결과 이미지는 원본보다 큽니다. 파일이나 다른 것을 추가했기 때문이 아니라 일부 구성 파일만 수정했기 때문입니다.

내가 원하는 것은 라이브 USB의 기존 squashfs 파일 시스템을 수정하고 일부 정보를 제거하여 로그인 셸에서 OS를 부팅하는 것입니다. EXT4 파티션의 공간을 고정했기 때문에 원본과 동일한 크기로 수정된 squashf가 필요합니다. 라이브 시스템이 실행되는 동안 변경할 수 있지만 이 프로세스를 자동화하기 위한 스크립트를 만들고 있으므로 라이브 USB 자체를 만들기 전에 이 작업을 수행해야 합니다. 이미지를 다시 만들 때 문제가 발생하는 이유는 결과 파일이 원본 파일보다 약 400mb 정도 크기 때문이며, -b 4096/1Mbyte 옵션을 사용하면 원본 파일이 약 2.2GB일 때 이미지가 약 800mb 더 커집니다.

이전에도 동일한 작업을 수행하여 파일 시스템에 스크립트를 추가했는데 훌륭하게 작동했지만 지금은 이번에 무슨 일이 일어나고 있는지 이해할 수 없습니다. .bash_history 백업을 검색했지만 성공하지 못했습니다.

이미지 크기를 줄이는 방법은 무엇입니까? ? 내가 뭘 잘못하고 있는 거지?

편집하다:

# Create Directories
mkdir /mnt/kali-iso
mkdir /mnt/squash
mkdir /tmp/squash_mod

# Mount ISO And Squashfs Image
mount /root/kali.iso /mnt/kali-iso
mount /mnt/kali-iso/live/filesystem.squashfs /mnt/squash -o loop

# Copy All Files To A Temp Directory To Modify Them
cp -rf /mnt/squash/* /tmp/squash_mod
cp /root/foo.sh /tmp/squash_mod/root/Desktop/

# Create Squashfs
mksquashfs /tmp/squash_mod filesystem.squashfs 

또는

# mksquashfs /tmp/squash_mod filesystem.squashfs -b 4096 # or 1Mbyte

"du" 명령의 결과:

du -ch /mnt/squash | grep "total"  =  6.6G total

du -ch /tmp/squash_mod | grep "total"  =  7.2G total

동일한 폴더 간에는 몇 가지 차이점이 있으며 크기도 다릅니다.

"/tmp/squash_mod/sbin = 8.8mb" "/mnt/squash/sbin = 8.5mb"

"/tmp/squash_mod/var = 309mb" "/mnt/squash/var = 282mb"

"/tmp/squash_mod/bin = 7.0mb" "/mnt/squash/bin = 6.8mb"

답변1

댓글을 달 수 없어서 답변을 작성합니다.

1) 나는 문제의 가장 큰 원인이 하드 링크 "곱셈"이라는 Patrick의 의견에 동의합니다. 일반적인 상황에서는 cp하드 링크 수만큼 하드 링크 파일의 복사본을 만들 수 있습니다. 사용 rsync하거나 cp -a대체하십시오.

unsquashfs2) 더 나은 해결책은 이미지를 단순화하여 반복 설치 단계를 건너뛸 수 있도록 하는 것입니다.

aufs3) 더 깊이 파고들려면 또는 unionfs:)을 사용할 수 있습니다 .

관련 정보