長い話を短く:予測可能なパーティション名を使用してinitramfsからsquashfsパーティションを起動するには?/dev/sda2
デバイス名がランダムに並べ替えられ、時には間違ったパーティションから起動するため、機能しません。
私たちは次のようにGentooのカスタムインストールを使用します。
/dev/sda1: /boot ext4 (unencrypted)
/dev/sda2: / squashfs (unencrypted)
/dev/sda3: /home ext4 (dm-crypt)
/dev/sda4: - swap
ルートパーティションとtmpfsをオーバーレイファイルシステムとしてマウントするカスタムinitramfsスクリプトを作成しました。我々は使用したこのガイド次のようになります。
#!/bin/busybox sh
mount -t proc none /proc
mount -t sysfs none /sys
# Mount the root filesystem.
mount -t squashfs -o ro /dev/sda2 /mnt/overlay
# (some stuff to set up the overlay with tmpfs is done here)
# Clean up.
umount /proc
umount /sys
# Boot the real thing.
exec switch_root /mnt/overlay /sbin/init
このディスクがシステムの唯一のディスクである限り、ディスクが1つしか/dev/sda2
ないシステムでは常にルートパーティションであるため、正しく起動され、すべてがうまく機能します。
このカスタムインストールは別の都市に出荷される予定なので、自動更新システムを開発しています。理想的には、顧客がUSBスティックを挿入してアップデートが完了するのを待つだけで、システムをアップデートできるはずです。インターネット経由のアップデートはオプションではありません。データを安全に保つことが最優先事項であり、私たちが選んだパーティショニング方式が私たちの要件に十分安全であると信じています。しかし、問題解決を意味するなら、新しいアイデアで開かれています。
USBフラッシュドライブアップデートシステムは元のGentooインストールのコピーであり、まったく同じパーティションスキームを使用します。しかし、USBスティックのinitramfsスクリプトが台無しになり、USBアップデートプログラムのルートではなく、元のインストールのルートを選択することがよくあります。明らかに、アップデートプログラム(USBドライブのルートディレクトリにあります)はこのようには実行されません。
/dev/sda2
USBスティックのinitramfsスクリプトを次のように置き換えてみました。
/dev/disk/by-id/usb*part2
、GRUB2メニューではすでに機能しますが、/dev/disk
現在は存在しないため、initramfsスクリプトでは機能しません。 (しかしなぜGRUBに存在するのですか?)$(findfs PARTUUID="partid-of-usb-squashfs-root")
、役に立たない$(findfs UUID="x")
、これはsquashfsパーティションにファイルシステムUUIDがある場合に機能します(ext4および他のファイルシステムで動作します)。
このガイドでは、devtmpfsまたはmdevを使用して初期化時にデータを入力することをお勧めしますが、これがudevの作業のように見え、initramfsスクリプトから起動するのは役に立たないようです/dev
。/dev/disk
devtmpfs
ルートパーティションにファイルシステムUUIDがない場合にinitramfsスクリプトから予測可能/永続パーティション名を取得するにはどうすればよいですか?
パーティションスキームを変更するのは少し難しく、通常のWindowsユーザーがsquashfsルートまたは/homeパーティションを表示したくありません。しかし、毎回同じパーティションから確実に起動できる他の方法がある場合は、試してみましょう。 LVMや私たちが考えていないことをやってみてください。
答え1
このために特別なツールに頼る必要はありません。
squashfsパーティションは、常にパーティションスキームの2番目のパーティションであることを知っていれば十分です。 pendriveの最初のパーティションのUUIDを設定し、$(findfs UUID=first-pendrive-partition)
結果を使用して実行するだけです。sed s/1/2/
システムは常に正しいパーティションを検出します。
答え2
この場合、LVMは候補ですが、ブートローダ/ initramfsに複雑さを追加します。
squashfs
ブロックデバイスで1つのファイルシステムしか存在しないことを保証できますか?もしそうなら、これはfindfs TYPE=squashfs
正しいルートファイルシステムを見つけるために使用できる方法です。
ただし、USBキーはほぼ同じなので、squashfs
ファイルシステムも含まれています。したがって、追跡情報を入れる代替場所を探し始める必要があります。お使いのボリュームには/boot
、USBキーにリムーバブルデバイスとして表示されるものがあり、ハードドライブに実際のマウントとして表示されるものがある場合があります。