읽기 / 쓰기에서 squashfs 파일 시스템 마운트


45

USB 스틱에 Clonezilla를 설치했으며 운영 체제를 약간 수정하고 싶습니다. 특히, 실행 가능한 스크립트를 삽입하여 /usr/sbin백업을 덜 고통스럽게 만들기 위해 자체 백업 명령을 쉽게 실행할 수 있도록하고 싶습니다.

기본 파일 시스템 /live/filesystem.squashfs은 USB FAT-32 파티션에 있습니다.

파일을 추가 / 제거 / 변경할 수 있도록 Linux 시스템에서이 읽기 / 쓰기를 마운트하려면 어떻게해야합니까? 우분투 12.04 파생 상품을 운영하고 있습니다.

답변:


38

루트로서 filesystem.squashfs빈 디렉토리에 복사하십시오 . 예 :

cp /mnt/clonezilla/live/filesystem.squashfs /path/to/workdir
cd /path/to/workdir

파일의 압축을 푼 다음 다른 곳으로 옮깁니다 (여전히 백업으로 사용).

unsquashfs filesystem.squashfs
mv filesystem.squashfs /path/to/backup/

에 들어가서 squashfs-root취향에 따라 추가 / 수정 한 다음 다시 만드십시오 filesystem.squashfs:

cd /path/to/workdir
mksquashfs squashfs-root filesystem.squashfs -b 1024k -comp xz -Xbcj x86 -e boot

filesystem.squashfsUSB 드라이브의 기존 드라이브 위에 새로 생성 된 사본을 복사하십시오 . 예 :

cp filesystem.squashfs /mnt/clonezilla/live/

그런 다음 LIVE USB를 재부팅하고 사용하십시오.

참고 : 위 명령은의 일부입니다 squashfs-tools.


이것은 훌륭하게 작동하지만 불행히도 모든 루트 디렉토리에 대해 알려주는 메시지가 표시됩니다 Source directory entry bin already used! - trying bin_1. 물론 내 출력 파일 시스템 에는 폴더를 병합하는 대신 a /bin및 a가 /bin_1있습니다. 어떤 아이디어? -noappend,파일 시스템으로 실행 하면 작동하지 않습니다.
Naftuli Kay

1
@ TKKocheran-사용자 지정 스크립트를 추가 /usr/bin하고로 다시 포장 한 후 여기에 오류가 발생하지 않습니다 mksquashfs. USB 드라이브가 제대로 부팅되고 라이브 세션에서 스크립트를 사용할 수 있습니다. 실행하기 전에 filesystem.squashfs수정 한 디렉토리와 동일한 디렉토리에 더 이상 이전 디렉토리 가 없는지 확인하십시오 . squashfs-rootmksquashfs
don_crissti

@Naftuli : "mv ... backup /"단계를 건너 뛴 것 같습니다.
Joachim Wagner

이 작업은 (가짜) 루트 아래에서 작동하지 않습니까? 추출에서 오류가 발생합니다create_inode: could not create character device squashfs-root/dev/audio, because you're not superuser!
Wilf

@Wilf- squashfs-root/dev/*일반 사용자로 장치 파일 ( )을 만들 수 없으며 루트 권한이 필요합니다.
don_crissti

5

시스템이 aufs 또는 overlayfs 와 같은 일부 uion 파일 시스템을 지원하는 경우 원래 squashfs 파일을 추출 할 필요가 없습니다.

예를 들어 overlayfs 가 사용됩니다 (커널 옵션으로 활성화) : squashfs.file을 / fm 또는 다른 곳에 마운트 할 수 있습니다 . / to/ temp 와 같이 2 개의 디렉토리가있는 쓰기 가능한 파일 시스템을 준비하십시오 . 병합 된 결과를 위해 다른 쓰기 가능한 디렉토리 / fin 을 준비 하십시오. 시스템에 오버레이로 함께 마운트하십시오 ---

mount -t overlay -o lowerdir=/fm,upperdir=/to,workdir=/temp overlay /fin

이제 / fin에 파일을 추가 / 수정할 수 있습니다 . 모든 것이 끝나면 mksquashfs / fin 을 새로운 squashfs 파일로 만들 수 있습니다 .

mksquashfs /fin newfile; umount /fin

그런 다음 사용 된 다른 모든 디렉토리를 지우거나 마운트 해제하십시오.

SquashFS는 일부 unionfs는 일반적으로 사용되는 라이브 CD .


마운트 된 / fin에서 파일을 삭제하면 생성 한 최종 스쿼시에서 제거됩니까?
localhost

2

여기 에 다른 답변이 있습니다.

bash# mount dir.sqsh /mnt/dir -t squashfs -o loop

7
위의 명령은 읽기 전용으로 마운트하므로 전혀 마운트하지 않는 것보다 낫습니다. 아아, 당면한 질문에 대한 완전한 대답은 아닙니다.
harperville

나는 그것이 완전한 답변이 아니라는 것에 동의합니다. unix.stackexchange.com/a/377269/27328 과 함께 파일 시스템의 압축을 풀 필요가없는 공간, 시간 및 공간을 절약 할 수 있습니다.
사용자

가장 간단한 방법, CentOS 7에서 작동
Seff

0

그림과 같이 overlayfs를 사용하는 것이 의사 "squashfs rw"를 갖는 가장 좋은 방법입니다. 그러나> 4.x 커널 (또는 ubuntu> 14.x trusty)에서 실행해야합니다.

overlayfs / aufs / unionfs없이 구형 라이브 CD에 앉아있을 때 대체 솔루션은 squashfs 자체 기능을 사용하는 것입니다

중대한:

 without unsquashfs, so this can be done on low storage system

예:

squashfs의 "usr"디렉토리 수정

1    mount squashfs_file /mnt

2    cp -a /mnt/usr $HOME  ##modify whatever $HOME/usr as needed

3    mksquashfs /mnt new_squashfs_file -wildcards -e usr

4    mksquashfs $HOME/usr new_squashfs_file -keep-as-directory

5    umount /mnt  # cleanup

3 행은 olddir_usr을 제외하고 일시적으로 squashfsfile을 빌드합니다.

4 행은 modified-usr-dir을 new_squashfsfile에 추가합니다.

여기 참조 squashfs squashfs 파일 내의 하위 디렉토리에 추가

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.