
나는 SquashFS 파일을 가지고 있는데, 마운트되었을 때 어떻게 작동하는지 대략적으로 알 수 있도록 파일이 어떻게 압축되었는지 알고 싶습니다.
squashfs-tools
패키지 에서 제공하는 유일한 바이너리는 SquashFS 파일 생성/추가 및 SquashFS 파일 추출을 위한 mksquashfs
및 입니다.unsquashfs
특정 SquashFS 파일을 만드는 데 어떤 압축 방법이 사용되었는지 어떻게 확인할 수 있나요?
답변1
unsquashfs -s
까지 사용된 압축 유형을 표시하는 기능이 없었습니다.이 커밋은 2009년 8월 7일에 이루어졌습니다.. 즉, squashfs-tools
4.0 이전 버전을 실행하는 경우 사용된 압축 방법을 볼 수 없습니다.
이 정보에서 나는 SquashFS 4.0 슈퍼블록을 읽어 사용된 압축 방법을 결정하는 방법을 도출했습니다( $SQUASHFS
SquashFS 파일의 경로는 어디에 있습니까?).
dd if=$SQUASHFS bs=1 count=2 skip=20 2>/dev/zero | od -An -tdI | xargs
또는 줄 끝에 파일 이름을 입력하려는 사람들을 위한 함수는 다음과 같습니다.
sqsh_comp_method(){ dd if="$1" bs=1 count=2 skip=20 2>/dev/zero|od -An -tdI | xargs;};sqsh_comp_method
숫자(SquashFS 4.4 기준으로 1에서 6 사이)를 받게 됩니다. 해당 숫자를 다음 표와 일치시켜 어떤 압축 방법이 사용되었는지 확인할 수 있습니다.
╔═══╦════════════════════╦════════════════════╗
║ # ║ Compression Method ║ Compatible Version ║
╠═══╬════════════════════╬════════════════════╣
║ 1 ║ gzip ║ 1.0 and newer ║
║ 2 ║ lzma ║ 4.1 and newer ║
║ 3 ║ lzo ║ 4.1 and newer ║
║ 4 ║ xz ║ 4.2 and newer ║
║ 5 ║ lz4 ║ 4.3 and newer ║
║ 6 ║ zstd ║ 4.4 and newer ║
╚═══╩════════════════════╩════════════════════╝
(원천)
위 dd
명령은 지정한 파일에 SquashFS 4.0 수퍼블록이 있는 경우에만 신뢰할 수 있는 출력을 제공합니다. Not SquashFS 4.0
파일에 $SQUASHFS
SquashFS 4.0 매직 넘버가 없으면 다음 명령은 " "를 출력합니다 .
if [[ "$(dd if="$SQUASHFS" bs=1 count=4 skip=28 2>/dev/zero | xxd -p)" != "04000000" ]] ; then echo -n "Not " ; fi ; echo "SquashFS 4.0"
설명
SquashFS 4.0 파일 시스템에서 압축 방법은 슈퍼블록의 21 번째 및 22 번째 바이트에 데이터 유형으로 저장됩니다 short
. dd bs=1 count=2 skip=20
을 검색하고 short
를 사람이 읽을 수 있는 숫자로 od -An -tdI
변환하며 선행 공백을 제거하는 것입니다.short
xargs
SquashFS 4.0 이전에는gzip방법.
이전 답변
unsquashfs
-s
SquashFS 파일 시스템 정보를 표시하기 위한 플래그가 있습니다 .
사용 예:
deltik@node51 [/tmp]# unsquashfs -s template.squashfs
Found a valid SQUASHFS 4:0 superblock on template.squashfs.
Creation or last append time Thu Apr 30 23:07:23 2015
Filesystem size 47225242.44 Kbytes (46118.40 Mbytes)
Compression gzip
Block size 131072
Filesystem is exportable via NFS
Inodes are compressed
Data is compressed
Fragments are compressed
Always_use_fragments option is not specified
Xattrs are compressed
Duplicates are removed
Number of fragments 23629
Number of inodes 437076
Number of ids 1
압축 유형만 식별하려면 awk '/^Compression/{print $2}'
. 예:
deltik@node51 [/tmp]# unsquashfs -s template.squashfs | awk '/^Compression/{print $2}'
gzip
답변2
file
버전 5.39 이상의 유틸리티는 squashfs 압축 표시를 지원합니다 . 블록 장치를 제공하는 경우 file
특수 파일인지 신경 쓰지 말고 파일인 것처럼 내부를 살펴보도록 지시해야 합니다.
file --special-files /dev/mmcblk0p1
/dev/mmcblk0p1: Squashfs filesystem, little endian, version 4.0, zlib compressed, 817826784 bytes, 27633 inodes, blocksize: 131072 bytes, created: Mon Nov 29 20:51:12 2021
답변3
또한 더 나은 답변을 찾고 있습니다. 귀하의 OS가 문제의 squashedfs를 제공하는 데 사용되는 압축을 지원하지 않는 것 같기 때문에 알고 싶어한다고 가정합니다. 또는 CentOS6의 unsquashfs처럼 압축 유형을 보고하지 않을 수도 있습니다.
그래서 strings | head
압축파일을 받았어요. 첫 번째 줄은 hsqs
이고 두 번째 줄은~해야 한다 사용된 압축 방법을 나타냅니다. 나는 이 방법을 사용하여 7zXZ
7zip이 실제로 방법이라는 것을 확인했다고 믿습니다 . 그러나 에서는 gzip
그런 행운이 없습니다. od -b
8진수 덤프를 얻고 파일 서명을 프로그램과 관련된 서명과 일치시키려면 파일을 사용해야 합니다 file
. 그러나 이번에도 그런 행운은 없습니다(내가 찾을 것으로 예상한 문자열은 037 213
이지만 037 221
.