diff options
Diffstat (limited to 'meta-phosphor/recipes-phosphor/preinit-mounts')
-rw-r--r-- | meta-phosphor/recipes-phosphor/preinit-mounts/preinit-mounts/init | 36 |
1 files changed, 33 insertions, 3 deletions
diff --git a/meta-phosphor/recipes-phosphor/preinit-mounts/preinit-mounts/init b/meta-phosphor/recipes-phosphor/preinit-mounts/preinit-mounts/init index 91f8038f9..818a32099 100644 --- a/meta-phosphor/recipes-phosphor/preinit-mounts/preinit-mounts/init +++ b/meta-phosphor/recipes-phosphor/preinit-mounts/preinit-mounts/init @@ -1,5 +1,11 @@ #!/bin/sh +mount_overlay() { + if ! mount overlay /etc -t overlay -o defaults,lowerdir=/etc,upperdir=/var/persist/etc,workdir=/var/persist/etc-work; then + mount overlay /etc -t overlay -o defaults,lowerdir=/etc:/var/persist/etc + fi +} + if ! mount ubi0:rwfs /var -t ubifs -o defaults; then if ! mount ubi0:rwfs /var -t ubifs -o defaults,ro; then mount tmpfs /var -t tmpfs -o defaults @@ -12,8 +18,32 @@ rm -rf /var/persist/etc-work/* # rm -rf specifically skips . and .. directories; pipe all output to null to avoid the error message rm -rf /var/persist/etc-work/.* > /dev/null 2>&1 -if ! mount overlay /etc -t overlay -o defaults,lowerdir=/etc,upperdir=/var/persist/etc,workdir=/var/persist/etc-work; then - mount overlay /etc -t overlay -o defaults,lowerdir=/etc:/var/persist/etc -fi +mount_overlay + +# Check if there are any issues accessing the files in /etc after mounting the +# overlay by doing an 'ls' command +error="/var/overlay-error" +cd /var/persist/etc/ +for i in *; do + # Only check regular files at the top of the directory + if [[ -f $i ]]; then + ls -i /etc/$i >/dev/null 2>${error}; + if [[ -s ${error} ]]; then + # We don't have a way to print this error to the journal, delete it + rm -f ${error} + # Attempt to re-create the overlay by moving out the overlay contents and + # copying them back to /etc, which would create them back in the overlay + cd + umount /etc + rm -rf /var/persist/etc-save + mv /var/persist/etc /var/persist/etc-save + mkdir -p /var/persist/etc + mount_overlay + cp -rp /var/persist/etc-save/* /etc/ + rm -rf /var/persist/etc-save + break + fi + fi +done exec /lib/systemd/systemd |