squashfsファイルシステムを読み書き可能にマウントする


45

USBスティックにClonezillaをインストールしていますが、オペレーティングシステムに変更を加えたいのですが。具体的には、実行可能なスクリプトを挿入して、/usr/sbinバックアップコマンドの実行を簡単にし、バックアップの負担を軽減したいと思います。

メインのファイルシステムは/live/filesystem.squashfs、USB FAT-32パーティションにあります。

ファイルを追加/削除/変更できるように、この読み取り/書き込みをLinuxマシンにマウントするにはどうすればよいですか?Ubuntu 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。案の定、出力ファイルシステムには、フォルダーをマージ/binするの/bin_1ではなく、とがあります。何か案は?-noappend,ファイルシステムで実行すると、単に機能しません。
ナフトゥリケイ

1
@TKKocheran -私は、カスタムスクリプトを追加した後、ここで、これらのエラーのいずれかが届かない/usr/binとして再梱包しますmksquashfs。USBドライブは正常に起動し、ライブセッションからスクリプトを使用できます。実行する前にfilesystem.squashfs、変更したディレクトリと同じディレクトリに古いファイルが存在しないことを確認してください。squashfs-rootmksquashfs
don_crissti

@Naftuli:「mv ... backup /」ステップをスキップしたようです。
ヨアヒムワーグナー

これは(偽の)ルートでは動作しませんか?抽出するだけでエラーが発生しますcreate_inode: could not create character device squashfs-root/dev/audio, because you're not superuser!
Wilf

@Wilf-デバイスファイル(squashfs-root/dev/*)を通常のユーザーとして作成することはできません。ルート権限が必要です。
don_crissti

5

システムがaufsoverlayfsなどのuionファイルシステムをサポートしている場合、元のsquashfsファイルを抽出する必要はありません。

たとえば、overlayfsを使用します(有効にするカーネルオプション):squashfs.fileを最初に/ fmまたは他の場所にマウントできます。/ to/ tempなどの2つのディレクトリを含む書き込み可能なファイルシステムを準備します。マージ結果のために別の書き込み可能なディレクトリ/ finを準備します。それらをシステムのoverlayfsとして一緒にマウントします---

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からファイルを削除すると、作成した最後のsquashfsからも削除されますか?
ローカルホスト

2

ここで、私は他の答えを見つけました:

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

7
上記のコマンドは、読み取り専用でマウントします。これは、まったくマウントしないよりも優れています。悲しいかな、目前の質問に対する完全な答えではありません。
ハーパービル

完全な答えではないことに同意します。一緒にunix.stackexchange.com/a/377269/27328少ないスペース、少ない時間-あなたはそれを修正するためにファイルシステムを解凍する必要はありません答えを構築することができます。
ユーザー

CentOSの7に取り組んで最も簡単な方法は、
Seff

0

示されているようにoverlayfsを使用することが、疑似「squashfs rw」を得るための最良の方法です。ただし、4.xカーネル(またはubuntu> 14.x trusty)で実行する必要があります。

overlayfs / aufs / unionfsなしで古いライブcdに座っている場合の代替ソリューションは、squashfs'ownの機能を利用することです

重要:

 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.