OverlayによるLINUX OSのROM化

提供:sufeeWiki
ナビゲーションに移動 検索に移動

※これは,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 ファイルにスクリプトを追加すると、システム起動時に自動的に実行されます。

以下は手順の概要です:

  1. 上記のコードをテキストエディタで開き、内容をコピーして新しいファイル(例えば、overlay_setup.sh)に保存します。
  2. ファイルを実行可能にします:chmod +x overlay_setup.sh
  3. /etc/rc.local ファイルをテキストエディタで開き、/etc/rc.local ファイルの最後の行(exit 0 の前)に以下の行を追加します: ここで、/path/to/overlay_setup.shoverlay_setup.sh スクリプトのフルパスを指定します。例えば、スクリプトが /root/overlay_setup.sh に保存されている場合、/root/overlay_setup.sh のように指定します。
  4. ファイルを保存して終了します。

これで、システム起動時に/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