OverlayによるLINUX OSのROM化
ナビゲーションに移動
検索に移動
※これは,chatGPT3による回答です。
質問
ではこれを 起動時に処理するようにしてください。
# 必要なディレクトリを作成
mkdir /mnt/upper mkdir /mnt/lower
# Upper Layerのデバイスをマウント
# /dev/sdX1 は、適切なデバイスを指定してください(例:/dev/sdb1など)
mount /dev/sdX1 /mnt/upper
# Lower Layer(ストレージのROM化されたデータ)を読み込み専用でマウント
# UUIDがhogehogeのデバイスを使用します
mount -o ro UUID=hogehoge /mnt/lower
# メモリ上にtmpfsを作成してWorkdirをマウント
mount -t tmpfs tmpfs /mnt/overlay-work
# overlayファイルシステムを作成してマウント
mount -t overlay overlay -o lowerdir=/mnt/lower,upperdir=/mnt/upper,workdir=/mnt/overlay-work /mnt/overlay-root
# オーバーレイ化したファイルシステムを / に移動
umount /mnt/overlay-root mount --move /mnt/overlay-root /
# マウントポイントの設定を保存
echo "UUID=hogehoge /mnt/lower ext4 ro 0 1" >> /etc/fstab
echo "overlay / overlay rw 0 1" >> /etc/fstab
echo "tmpfs /mnt/overlay-work tmpfs defaults 0 0" >> /etc/fstab
回答
起動時に自動的に上記の処理を行うようにするには、上記のコードをスクリプトとして保存し、/etc/rc.local
ファイルに追加します(もしくは systemd
サービスとして実行する方法もあります)。/etc/rc.local
ファイルにスクリプトを追加すると、システム起動時に自動的に実行されます。
以下は手順の概要です:
- 上記のコードをテキストエディタで開き、内容をコピーして新しいファイル(例えば、
overlay_setup.sh
)に保存します。 - ファイルを実行可能にします:
chmod +x overlay_setup.sh
。 /etc/rc.local
ファイルをテキストエディタで開き、/etc/rc.local
ファイルの最後の行(exit 0
の前)に以下の行を追加します: ここで、/path/to/overlay_setup.sh
はoverlay_setup.sh
スクリプトのフルパスを指定します。例えば、スクリプトが/root/overlay_setup.sh
に保存されている場合、/root/overlay_setup.sh
のように指定します。- ファイルを保存して終了します。
これで、システム起動時に/etc/rc.local
ファイルが実行され、overlay_setup.sh
スクリプトが自動的に実行されるようになります。スクリプトが正しく実行されると、overlay
ファイルシステムが起動時に構築され、指定した条件を満たすことができるはずです。
精密に
# /etc/fstab: static file system information. # Root file system (read-only) /dev/sda1 / ext4 ro,relatime 0 1 # Boot partition (read-only) /dev/sda2 /boot vfat ro,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro 0 2 # Other filesystems (tmpfs) tmpfs /run tmpfs defaults,nosuid,nodev,noexec,relatime,size=388540k,mode=755 0 0 tmpfs /mnt/root-rw tmpfs defaults,relatime 0 0 tmpfs /mnt/boot-rw tmpfs defaults,relatime 0 0 tmpfs /dev/shm tmpfs defaults,nosuid,nodev 0 0 tmpfs /run/lock tmpfs defaults,nosuid,nodev,noexec,relatime,size=5120k 0 0 tmpfs /run/user/1000 tmpfs defaults,nosuid,nodev,relatime,size=388536k,nr_inodes=97134,mode=700,uid=1000,gid=1000 0 0 # Other system mounts sysfs /sys sysfs defaults,nosuid,nodev,noexec,relatime 0 0 proc /proc proc defaults,relatime 0 0 udev /dev devtmpfs rw,nosuid,relatime,size=1670512k,nr_inodes=417628,mode=755 0 0 devpts /dev/pts devpts defaults,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0 securityfs /sys/kernel/security securityfs defaults,nosuid,nodev,noexec,relatime 0 0 pstore /sys/fs/pstore pstore defaults,nosuid,nodev,noexec,relatime 0 0 bpf /sys/fs/bpf bpf defaults,nosuid,nodev,noexec,relatime,mode=700 0 0 systemd-1 /proc/sys/fs/binfmt_misc autofs defaults,relatime,fd=29,pgrp=1,timeout=0,minproto=5,maxproto=5,direct 0 0 debugfs /sys/kernel/debug debugfs defaults,nosuid,nodev,noexec,relatime 0 0 sunrpc /run/rpc_pipefs rpc_pipefs defaults,relatime 0 0 tracefs /sys/kernel/tracing tracefs defaults,nosuid,nodev,noexec,relatime 0 0 mqueue /dev/mqueue mqueue defaults,nosuid,nodev,noexec,relatime 0 0 fusectl /sys/fs/fuse/connections fusectl defaults,nosuid,nodev,noexec,relatime 0 0 configfs /sys/kernel/config configfs defaults,nosuid,nodev,noexec,relatime 0 0 gvfsd-fuse /run/user/1000/gvfs fuse.gvfsd-fuse rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0
簡潔に
# Root file system (read-only) /dev/sda1 /mnt/root-ro ext4 ro,relatime 0 0 overlay / overlay rw,lowerdir=/mnt/root-ro,upperdir=/mnt/root-upper,workdir=/mnt/root-work 0 0 # Boot partition (read-only) /dev/sda2 /mnt/boot-ro vfat ro,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro 0 0 overlay /boot overlay rw,lowerdir=/mnt/boot-ro,upperdir=/mnt/boot-upper,workdir=/mnt/boot-work 0 0
2つを合わせる
# Root file system (read-only) /dev/sda1 /mnt/root-ro ext4 ro,relatime 0 1 overlay / overlay rw,lowerdir=/mnt/root-ro,upperdir=/mnt/root-upper,workdir=/mnt/root-work 0 0 # Boot partition (read-only) /dev/sda2 /mnt/boot-ro vfat ro,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro 0 0 overlay /boot overlay rw,lowerdir=/mnt/boot-ro,upperdir=/mnt/boot-upper,workdir=/mnt/boot-work 0 0 # Other filesystems (tmpfs) tmpfs /run tmpfs defaults,nosuid,nodev,noexec,relatime,size=388540k,mode=755 0 0 tmpfs /mnt/root-rw tmpfs defaults,relatime 0 0 tmpfs /mnt/boot-rw tmpfs defaults,relatime 0 0 tmpfs /dev/shm tmpfs defaults,nosuid,nodev 0 0 tmpfs /run/lock tmpfs defaults,nosuid,nodev,noexec,relatime,size=5120k 0 0 tmpfs /run/user/1000 tmpfs defaults,nosuid,nodev,relatime,size=388536k,nr_inodes=97134,mode=700,uid=1000,gid=1000 0 0 # Other system mounts sysfs /sys sysfs defaults,nosuid,nodev,noexec,relatime 0 0 proc /proc proc defaults,relatime 0 0 udev /dev devtmpfs rw,nosuid,relatime,size=1670512k,nr_inodes=417628,mode=755 0 0 devpts /dev/pts devpts defaults,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0 securityfs /sys/kernel/security securityfs defaults,nosuid,nodev,noexec,relatime 0 0 pstore /sys/fs/pstore pstore defaults,nosuid,nodev,noexec,relatime 0 0 bpf /sys/fs/bpf bpf defaults,nosuid,nodev,noexec,relatime,mode=700 0 0 systemd-1 /proc/sys/fs/binfmt_misc autofs defaults,relatime,fd=29,pgrp=1,timeout=0,minproto=5,maxproto=5,direct 0 0 debugfs /sys/kernel/debug debugfs defaults,nosuid,nodev,noexec,relatime 0 0 sunrpc /run/rpc_pipefs rpc_pipefs defaults,relatime 0 0 tracefs /sys/kernel/tracing tracefs defaults,nosuid,nodev,noexec,relatime 0 0 mqueue /dev/mqueue mqueue defaults,nosuid,nodev,noexec,relatime 0 0 fusectl /sys/fs/fuse/connections fusectl defaults,nosuid,nodev,noexec,relatime 0 0 configfs /sys/kernel/config configfs defaults,nosuid,nodev,noexec,relatime 0 0 gvfsd-fuse /run/user/1000/gvfs fuse.gvfsd-fuse rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0