明らかに私は実際にsquashfsを修正したくありません。私がやりたいことは、既存のsquashfs、ファイルセットをインポートして、セット内のファイルがsquashfsの類似ファイルを置き換えるか(存在する場合)なしで追加されることを除いて、古いファイルと同じ新しいsquashfsを作成することです。文書のようなもの。
さて、最後の部分が奇妙に聞こえます。たとえば、見てみましょう。
mfs.squashという名前のsquashfsがあります。中にファイルがあります./a/foo
。私は古いsquashfsと同じ新しいsquashfsを作成したいと思います。ただし、新しいファイルがあり、a/b
それを私の仕様の1つで上書きします。./a/foo
答え1
Squashfsをインストールします。
mkdir /mnt/squishy
mount mfs.sqash /mnt/squishy -t squashfs -o loop
squashfsを別の場所にコピーします。
mkdir /tmp/squooshtacular
find /mnt/squishy -xdev -print0 | cpio -pa0V /tmp/squooshtacular
新しいファイルをその場所にコピーします。
cp ./a.foo /tmp/squooshtacular/a.foo
新しいsquashfsを作成します。
mksquashfs /tmp/squooshtacular mfs_with_bbq_sauce.squash
答え2
上記のように、unsquashまたはcpio Mounted_squashfsなしでnew_or_modified files_dirをsquashfs_fileに追加できます。詳細な回答については、次をご覧ください。
答え3
squashfsをar / wファイルシステムに抽出して変更してから再圧縮することは、小さなボリュームに対してはうまく機能します。あるいは、mksquashfsを使用してコンテンツをトップレベルディレクトリに追加(「append」)することもできます。これは非常に高速です。
ただし、squashfsボリュームが大きく、解凍して再圧縮するスペースが問題であるか、パフォーマンスが問題である場合は、overlayfs(man mount --> overlayfsオプション)が必要です。
- Squashfsボリュームマウント
mount -t squashfs stuff.sq /mnt/stuff
- overlayfs用のオーバーヘッドディレクトリの作成
mkdir -p /overlay/{upper,work}/stuff /mnt/stuff-new
- インストールしてください
mount -t overlay -o lowerdir=/mnt/stuff,upperdir=/overlay/upper/stuff,workdir=/overlay/work/stuff overlay /mnt/stuff-new
(追加オプションについてはマニュアルページを確認してください) - いつものように/mnt/stuff-newを変更してください。
- その後、再梱包
mksquashfs /mnt/stuff-new stuff-new.sq
- 完了したら、オーバーレイを削除し、一時ディレクトリ(元のカボチャも含む)を削除します。
複数の重複ディレクトリ階層をマージする場合は、それよりも少し複雑ですが、オーバーレイインストールで複数のサブディレクトリを一覧表示し、機能しない重複部分をパッチして再パッケージ化することもできます。