イメージファイルをUnionFSオーバーレイに自動マウントする

イメージファイルをUnionFSオーバーレイに自動マウントする

UnionFSを使用してシステム起動時にイメージファイルを自動的にマウントしてカスタマイズできるように、デフォルトの/ etcディレクトリファイルの上に設定ファイル(/ etc / network / interfacesなど)を上書きしたいと思います。

私は組み込みLinuxディストリビューション(疑問がある場合はカーネル3.14.28)を使用しており、システムがログインプロンプトに到達した後に手動で目的の結果を得ることができました。

今システムの起動中にこのプロセスを自動化したいと思います。

私の考えは、/ etc / fstabがこれを達成するために必要なすべての機能を提供することです。ただし、システムの起動中にFATパーティションを自動的にマウントし、後でUnionFSをマウントするのに問題があります。

私の/etc/fstabは次のようになります:

# start: /etc/fstab file
/dev/root   /               auto       defaults              1  1
proc        /proc           proc       defaults              0  0
devpts      /dev/pts        devpts     mode=0620,gid=5       0  0
usbdevfs    /proc/bus/usb   usbdevfs   noauto                0  0
tmpfs       /run            tmpfs      mode=0755,nodev,nosuid,strictatime 0  0
tmpfs       /var/volatile   tmpfs      defaults              0  0

# mount the user data image and then mount the unionfs user setting overlays
/dev/mmcblk2p1/userdata.img      /userdata       vfat    loop,auto,rw,exec                               0       0
/userdata/etc               /etc            unionfs    dirs=/userdata/etc=rw:/etc=ro,auto   0       0
# end: /etc/fstab file

起動中に次のように表示されます。

...
EXT3-fs (mmcblk2p3): mounted filesystem with ordered data mode
VFS: Mounted root (ext3 filesystem) readonly on device 179:11.
devtmpfs: mounted
Freeing unused kernel memory: 352K (80e3b000 - 80e93000)
INIT: version 2.88 booting
unionfs: error accessing lower directory '/userdata/etc' (error -2)
unionfs: read_super: error while parsing options (err = -2)
Starting udev
udevd[187]: starting version 182
EXT3-fs (mmcblk2p5): using internal journal
EXT3-fs (mmcblk2p5): mounted filesystem with ordered data mode
FAT-fs (mmcblk1p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
EXT3-fs (mmcblk1p2): warning: mounting fs with errors, running e2fsck is recommended
EXT3-fs (mmcblk1p2): using internal journal
EXT3-fs (mmcblk1p2): mounted filesystem with ordered data mode
FAT-fs (mmcblk2p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
EXT3-fs (mmcblk2p2): using internal journal
EXT3-fs (mmcblk2p2): mounted filesystem with ordered data mode
EXT3-fs (mmcblk2p3): using internal journal
...

マウントポイント(/ userdata)が準備される前に、システムがUnionFSマウントを実行しようとしているようです。私の理解は、/etc/fstabにリストされているパーティションが順番にマウントされることです。そうでない場合は教えてください;)

だから私の質問は次のとおりです。目的の自動マウント効果を得るには、/etc/fstab(およびその他のファイル)をどのように変更しますか?

事前にありがとう

答え1

コード例はこの記事の最後にあります。。 systemd は fstab を読み込み、fs を並列にマウントしようとします。 systemdデフォルトのマウントスクリプトは起動時に生成され、以下にあります。

'run/systemd/generator'

fs にアクセスしたときにのみマウントされる fstab の noauto パラメーターを試してみてください。これにより、場合によっては、マウントポイントを有効にする前にマウントポイントに2回アクセスする必要がある副作用が発生する可能性があります。

おそらく、この状況はマウントポイントにアクセスするプログラムを遅らせることで解決できます。本当に - 本当かどうかはわかりません。しかし、別の解決策は、fstabの読み取りをオーバーライドするシステム起動スクリプトを作成することです。これは2つの方法で行うことができます。 systemdにマウントオプションを指定するrc.localファイルを読み取るように指示するか(私の意見では)、より正しい方法であるsystemd専用スクリプトを作成することです。

私が提供する例はすべて、他の例で見つけたインストールスクリプトからのものです。

後でこの投稿を編集してこれらのスクリプトを作成するのに役立つお気に入りのリソースへのリンクを追加します。どちらの例も 2 つのファイルが必要です。免責事項 私は、取付ポイントが基準を満たしていると主張しません。たとえば、ルートディレクトリにフォルダをマウントします。これは私がLinuxの経験がなく、私のテストベッドシステムで私のやり方で私がやっている間に私が試したことだけです。これは進行中の作業であり、現在やや急いで行われています。この例は参考用であり、私よりも厳密に書くことを試みました。また、これらのファイルを改善する方法はいくつかあります。ご意見やご提案ありがとうございました。

1. rc-localを使う

#This file should be named /etc/systemd/system/rc-local.service
[Unit]
Description=/etc/rc.local Compatibility
ConditionFileIsExecutable=/usr/local/sbin/rc.local

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/rc.local
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99

[Install]
WantedBy=multi-user.target

#Local multi-user startup script.
#this file should be named as  /usr/local/sbin/rc.local and have the executable attribute set.
#!/bin/sh
mount -L BIGDATA /BIGDATA
#2do, If LABEL not found, Add failback  to  search for UUID 
LBL=$(blkid -s LABEL  $(mount | grep " / ") | cut -d "=" -f 2-2 | tr -d '"')

mount -t aufs -o dirs=/BIGDATA/mountslinks/dist-global_rw/newfiles_rw/home=rw:/BIGDATA/mountslinks/dist-global_rw/global_rw/home=rw:/BIGDATA/mountslinks/dist-local_rw/"$LBL"/home=rw none /home
mount -t aufs -o dirs=/BIGDATA/mountslinks/dist-global_rw/newfiles_rw/root=rw:/BIGDATA/mountslinks/dist-global_rw/global_rw/root=rw:/BIGDATA/mountslinks/dist-local_rw/"$LBL"/root=rw none /root

2.ただsystemdを使う(何度も再起動した後、この方法に切り替えました。最初の方法が機能していないためではありません。実際(私のシステムでは)うまくいきました。志向的だと思います。

#this one is an edited version of the one Automatically generated by systemd-fstab-generator

[Unit]
Before=local-fs.target
[Mount]
What=/dev/disk/by-label/BIGDATA
Where=/BIGDATA
Type=ext4
Options=defaults,nofail

[Install]
WantedBy=multi-user.target

[Unit]
Before=local-fs.target
Requires = BIGDATA.mount
After = BIGDATA.mount

[Mount]
What=noauto,x-systemd.requires=/BIGDATA,x-systemd.automount
Where=/home/peter
Type=aufs
Options=br=/BIGDATA/mountslinks/lubuntu/new_rw/home/peter=rw:/BIGDATA/mountslinks/lubuntu/local_rw/home/peter=rw:/BIGDATA/mountslinks/lubuntu/shared_rw/home/peter=rw


[Install]
WantedBy = multi-user.target

また、fstabの1つがfstabにパラメータを追加してシステムにマウント順序を知らせることができると思います。

関連情報