Squashfs는 리눅스 기반의 읽기 전용 압축 파일 시스템이다. 이 파일 시스템은 데이터를 압축하여 저장 공간을 절약할 수 있어 임베디드 시스템, 라이브 CD 및 기타 용량 제한이 있는 환경에서 자주 사용된다. Squashfs는 고도의 압축률을 제공하며, 필요한 데이터만 비압축하여 빠르게 접근할 수 있다. 이 글에서는 Squashfs 기본 개념과 설치, 생성 방법 등을 알아본다.
Squashfs 의 주요 특징은 다음과 같다.
- 읽기 전용: Squashfs는 읽기 전용 파일 시스템으로, 데이터 수정이 불가능하다.
- 고압축률: 데이터 압축을 통해 저장 공간을 절약합니다. 주로
gzip
,xz
,lz4
등의 압축 알고리즘을 사용한다. - 빠른 읽기 속도: 압축된 데이터 중 필요한 부분만 읽고 비압축하여 빠르게 접근할 수 있다.
- 다양한 사용처: 라이브 CD, 임베디드 시스템, 컨테이너 기반 시스템 등에서 널리 사용된다.
Squashfs 툴 설치
대부분의 리눅스 배포판에서는 기본적으로 Squashfs를 지원하지만, 필요한 패키지가 설치되어 있는지 확인해야 한다. Squashfs 도구는 squashfs-tools
라는 패키지에 포함되어 있으며, 이를 설치하면 Squashfs 파일 시스템을 생성하고 관리할 수 있다.
설치 방법
Ubuntu 및 Debian 계열에서 squashfs-tools
패키지를 설치하는 명령어는 다음과 같다.
sudo apt update
sudo apt install squashfs-tools -y
설치가 완료되면 SquashFS 파일 시스템을 생성하고 관리할 수 있는 mksquashfs
와 unsquashfs
명령어를 사용할 수 있게 된다.
Squashfs 이미지 생성
Squashfs 이미지를 생성하려면 mksquashfs
명령어를 사용한다. 이 명령어를 사용하면 하나의 디렉토리를 압축하여 Squashfs 파일 시스템 이미지를 만들 수 있다.
mksquashfs /path/to/source /path/to/destination/image.squashfs
$ mksquashfs rootfs rootfs.sqfs
Parallel mksquashfs: Using 4 processors
Creating 4.0 filesystem on rootfs.sqfs, block size 131072.
[========================================================================\] 1835/1835 100%
Exportable Squashfs 4.0 filesystem, gzip compressed, data block size 131072
compressed data, compressed metadata, compressed fragments,
compressed xattrs, compressed ids
duplicates are removed
Filesystem size 27030.86 Kbytes (26.40 Mbytes)
39.44% of uncompressed filesystem size (68534.47 Kbytes)
Inode table size 18814 bytes (18.37 Kbytes)
26.59% of uncompressed inode table size (70746 bytes)
Directory table size 20140 bytes (19.67 Kbytes)
45.39% of uncompressed directory table size (44371 bytes)
Number of duplicate files found 13
Number of inodes 1980
Number of files 1378
Number of fragments 70
Number of symbolic links 428
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 174
Number of ids (unique uids + gids) 1
Number of uids 1
jammy (1000)
Number of gids 1
jammy (1000)
압축 알고리즘 옵션
Squashfs는 다양한 압축 옵션을 제공한다. mksquashfs
명령어에 -comp
옵션을 주어 압축 알고리즘을 지정할 수 있다.
mksquashfs myfolder myimage.squashfs -comp gzip
압축 알고리즘은 GZIP 을 기본으로, XZ, LZO, LZ4, ZSTD 등을 줄 수 있다.
$ mksquashfs rootfs rootfs.sqfs -comp zstd
Parallel mksquashfs: Using 4 processors
Creating 4.0 filesystem on rootfs.sqfs, block size 131072.
[========================================================================\] 1835/1835 100%
Exportable Squashfs 4.0 filesystem, zstd compressed, data block size 131072
compressed data, compressed metadata, compressed fragments,
compressed xattrs, compressed ids
duplicates are removed
Filesystem size 25969.82 Kbytes (25.36 Mbytes)
37.89% of uncompressed filesystem size (68534.47 Kbytes)
Inode table size 16384 bytes (16.00 Kbytes)
23.16% of uncompressed inode table size (70746 bytes)
Directory table size 19540 bytes (19.08 Kbytes)
44.04% of uncompressed directory table size (44371 bytes)
Number of duplicate files found 13
Number of inodes 1980
Number of files 1378
Number of fragments 70
Number of symbolic links 428
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 174
Number of ids (unique uids + gids) 1
Number of uids 1
jammy (1000)
Number of gids 1
jammy (1000)
블럭 사이즈 옵션
Squashfs는 mksquashfs
명령어에 -b <block size>
옵션을 주어 블럭 사이즈를 지정할 수 있다.
mksquashfs myfolder myimage.squashfs -b <block size>
$ mksquashfs rootfs rootfs.sqfs -b 4096
Parallel mksquashfs: Using 4 processors
Creating 4.0 filesystem on rootfs.sqfs, block size 4096.
[======================================================================-] 18048/18048 100%
Exportable Squashfs 4.0 filesystem, gzip compressed, data block size 4096
compressed data, compressed metadata, compressed fragments,
compressed xattrs, compressed ids
duplicates are removed
Filesystem size 29927.02 Kbytes (29.23 Mbytes)
43.62% of uncompressed filesystem size (68602.89 Kbytes)
Inode table size 44815 bytes (43.76 Kbytes)
32.80% of uncompressed inode table size (136646 bytes)
Directory table size 20294 bytes (19.82 Kbytes)
45.65% of uncompressed directory table size (44455 bytes)
Number of duplicate files found 13
Number of inodes 1980
Number of files 1378
Number of fragments 325
Number of symbolic links 428
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 174
Number of ids (unique uids + gids) 1
Number of uids 1
jammy (1000)
Number of gids 1
jammy (1000)
Squashfs 파일 시스템 마운트
Squashfs 파일 시스템은 읽기 전용으로 마운트할 수 있다. 이래와 같이 생성된 filesystem.squashfs
파일을 특정 디렉토리에 마운트하여 사용할 수 있다.
mkdir mountpoint
sudo mount -t squashfs rootfs.sqfs mountpoint
$ mkdir mountpoint
sudo mount -t squashfs rootfs.sqfs mountpoint
[sudo] password for jammy:
$ mount | grep mountpoint
/home/jammy/rootfs.sqfs on /home/jammy/mountpoint type squashfs (ro,relatime,errors=continue)
Squashfs 파일 시스템 내용 추출
읽기 전용으로 생성된 SquashFS 파일 시스템에서 내용을 추출하려면 다음과 같이 unsquashfs
명령어를 사용한다.
unsquashfs -f -d /extracted_dir filesystem.squashfs
$ mkdir extracted_dir
$ unsquashfs -f -d extracted_dir rootfs.sqfs
Parallel unsquashfs: Using 4 processors
1809 inodes (18476 blocks) to write
[======================================================================|] 18476/18476 100%
created 1378 files
created 174 directories
created 428 symlinks
created 0 devices
created 0 fifos
created 0 sockets
$ ls extracted_dir/
bin boot dev etc home lib media mnt proc run sbin srv sys tmp usr var