squashfsを修正し、

squashfsを修正し、

明らかに私は実際に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に追加できます。詳細な回答については、次をご覧ください。

squashfs ファイル内のサブディレクトリに追加

答え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
  • 完了したら、オーバーレイを削除し、一時ディレクトリ(元のカボチャも含む)を削除します。

複数の重複ディレクトリ階層をマージする場合は、それよりも少し複雑ですが、オーバーレイインストールで複数のサブディレクトリを一覧表示し、機能しない重複部分をパッチして再パッケージ化することもできます。

関連情報