rootをoverlayfsにマウント

rootをoverlayfsにマウント

私はルート(/)をオーバーレイfsとしてマウントしようとしました。

オペレーティングシステムがNFS経由でRAMとして起動しています。 「work」、「upper」、および「lower」ディレクトリを作成するinitrdにプレインストールスクリプトを追加しました。

起動プロセス中に、NFSの内容を「サブ」ディレクトリにコピーします。これにより、Overlayfsが$ {rootmnt}にマウントされます。

最後に、initスクリプトは$ {rootmnt}でルートを指定し(次に実際のルートで初期化するなど)、OSが正常に動作します。

もちろん、「作業」と「親」ディレクトリは表示されません。どうすればいいですか? initrdで何を変更する必要がありますか?

ベストアンサー1

オーバーレイfsでルートをマウントする問題を修正しました。

つまり、「子」、「作業」、および「親」ディレクトリを「マージ」ディレクトリに移動する必要があります。ただし、次の点を考慮する必要があります。

1)「サブ」ディレクトリがディスクイメージとして存在する場合は、別のアクションは必要ありません。ただインストールしてください。そうでない場合一時ファイルシステムマウントポイントを指定し、NFSを介して必要なすべてのファイルをそのポイントにコピーします。

2) 「親」ディレクトリと「子」ディレクトリは同じファイルシステム上になければなりません。他のものを作ろう一時ファイルシステムマウントポイントに「親」と「子」ディレクトリを配置するだけで十分です。

initrd.img3)NFSおよびOverlayfsモジュールがあることを確認してください。存在しない場合は、/etc/initramfs-tools/modules に追加します。

initrd.img4)「mount」コマンドのフルバージョンがあることを確認してください。存在しない場合は、フックに追加してください/etc/initramfs-tools/hooks

たとえば(一部の詳細は省略):

/etc/initramfs-tools/hooks/mount_full:

#!/bin/sh
PREREQ="/bin/mount"
prereqs()
{
    echo "$PREREQ"
}

case $1 in
    prereqs)
            prereqs
            exit 0
    ;;
esac

. /usr/share/initramfs-tools/hook-functions
# Begin real processing below this line

copy_exec /bin/mount /bin/mount_full

exit 0 

最後に、.txtファイルにプリマウントスクリプトを追加します/etc/initramfs-tools/scripts/init-premount/。たとえば、

/etc/initramfs-tools/scripts/init-premount/ramboot:

#!/bin/sh
PREREQ=""
prereqs()
{
    echo "$PREREQ"
}

case $1 in
    prereqs)
            prereqs
            exit 0
    ;;
esac

. /scripts/functions
# Begin real processing below this line

# Preparing work dirs
mkdir /overlaytmp
mkdir /overlaytmp/lower
mkdir /overlaytmp/upper_and_work
mkdir /overlaytmp/merge
mkdir /ramboottmp

# Preparing RAM disks and thus layers
mount -t tmpfs -o size=100% none /overlaytmp/lower
mount -t tmpfs -o size=100% none /overlaytmp/upper_and_work
mkdir /overlaytmp/upper_and_work/upper
mkdir /overlaytmp/upper_and_work/work

...
mount nfs_share /ramboottmp
...

# Copy root content over NFS to RAM
echo "Copying / to RAM ..."
cp -rfa /ramboottmp/* /overlaytmp/lower
# Preparing layers mount points
mkdir /overlaytmp/lower/mnt/lower
mkdir /overlaytmp/lower/mnt/upper_and_work
# Lower layer will be read-only
mount -o remount,ro /overlaytmp/lower

# Mounting overlayfs
mount -t overlay -olowerdir=/overlaytmp/lower,upperdir=/overlaytmp/upper_and_work/upper,workdir=/overlaytmp/upper_and_work/work none /overlaytmp/merge

# Moving layers to merge layer
mount --move /overlaytmp/lower /overlaytmp/merge/mnt/lower
mount --move /overlaytmp/upper_and_work /overlaytmp/merge/mnt/upper_and_work

# Moving merge layer to finally root
mount --move /overlaytmp/merge ${rootmnt}

umount /ramboottmp

おすすめ記事