圧縮フォルダを tmpfs にマウントするための Initramfs-tools スクリプト

圧縮フォルダを tmpfs にマウントするための Initramfs-tools スクリプト

私は、特殊なカーネルとカーネル モジュールを必要とする特殊なハードウェアを搭載したラップトップ用に、小さなレスキュー パーティション (他のすべてのシステム パーティションとストレージ パーティションの後に約 800 MB の空き領域) を作成しようとしています。そのため、Clonezilla Live や GParted Live などの標準のレスキュー ツールはあまりうまく機能しません。パーティションが小さすぎて、構築したいものに必要なモジュールとソフトウェアを含めることができず、システムの大部分を圧縮して実行時に RAM にロードする必要があります。また、 に頼るのではなく、システムを完全に抽出しsquashfs、パーティションで許可される範囲でシステムに加えられた変更を保存する機能も必要です。Ubuntu 20.04 をベース システムとして使用し、この目的のために次のスキームを考案しました。

  1. で初期システムを構築した後chroot、実行時に解凍されたシステムファイルとユーザーファイルを格納する/ramためのマウントポイントとして空のフォルダを作成し、すべてのシステムファイルフォルダとユーザーファイルフォルダ( 、、、、、、)を移動しtmpfsます。homeusrvaroptetc) を にコピーし/ram、それぞれを へのシンボリック リンクに置き換えます/ram/$dir/ramを として圧縮し/ram.tar.gz、特殊なマウント ポイント ( devsysruntmpproc) とbootを 上にそのまま残しますrootfs。 を削除し、 をパーティションに/ram/*書き込みます。rootfs
  2. 起動時にカーネルとがinitrdロードされた後、 を事前マウントし、にrootfsマウントして、の内容を に抽出します。これは、 を root として置き換える前に実行する必要があります。そうしないと、 は圧縮アーカイブをマウントして抽出するために必要なユーティリティにアクセスできません。tmpfs/ram/ram.tar.gz/ramrootfsinitramfsrootfs/ram
  3. マウントしrootfsて起動を続行します。
  4. /ram.tar.gzシャットダウン時に としてバックアップし、/ram.tar.gz.bak変更された/ramを に圧縮します/ram.tar.gz。 これは を使用して実現できますsystemd

明らかに、ステップ 4 で問題が発生する可能性があるため、ステップ 2 ではバックアップの整合性を含め/ram.tar.gz、失敗した場合はバックアップをロードする必要がありますが、これはスクリプトに含めるいくつかの追加コマンドでありinitramfs-tools、私の質問の範囲を超えています。質問は次のとおりです。

を変更せずに/usr/share/initramfs-tools/init、ステップ2を実行するためのスクリプトを作成するにはどうすればよいでしょうか/etc/initramfs-tools/scripts? コマンドは次のように簡単です。

mount -t tmpfs -o $OPTIONS none /ram
tar xvzf ram.tar.gz

PREREQしかし、スクリプトをどのフォルダーに含めるか (init? local? top? bottom? premount?)、またスクリプト自体のヘッダーをどのように操作するかについては、少し迷っています。

答え1

非常に簡単でした。作成:

/etc/initramfs-tools/scripts/local-bottom/ramfiles
#!/bin/sh

set -e

PREREQ=""

prereqs()
{
        echo "${PREREQ}"
}

case "${1}" in
        prereqs)
                prereqs
                exit 0
                ;;
esac

mount -t tmpfs -o size=100% none ${rootmnt}/ram
tar xvzf ${rootmnt}/ram.tar.gz -C ${rootmnt}


それから

sudo chmod +x /etc/initramfs-tools/scripts/local-bottom/ramfiles
sudo update-initramfs -u

関連情報