raspberry piにunionfs-fuseを導入するとSDカードの内容が消える


Raspberry pi3で電源断を簡単に行いたいと考え、  
unionfs-fuseを導入しました。  
いくつかのサイト様を参考にインストール、設定は完了したのですが  
一度シャットダウンさせると起動しなくなり  
SDカードの内容を確認するとファイルがすべて空になっていました。

下記の手順で導入を行いました。

事前にswapファイル、logファイルなどをRAMディスクに移すなどの設定は済ませています。

  1. パッケージ導入
[code]     $ sudo apt-get install unionfs-fuse

    
[/code]

  2. 設定ファイルコピー
[code]     $ sudo cp /usr/share/doc/unionfs-fuse/examples/S01a-unionfs-fuse-
live-cd.sh /etc/init.d/a-unionfs-fuse-live-cd

    $ sudo cp /usr/share/doc/unionfs-fuse/examples/rc.local.omit-pid.sh /usr/local/sbin/a-unionfs-fuse-omit-pid.sh　
    
[/code]

  3. /etc/init.d/a-unionfs-fuse-live-cd を編集
[code]     #!/bin/sh

    ### BEGIN INIT INFO
    # Provides: a-unionfs-fuse-live-cd
    # Required-Start: mountall-bootclean
    # Required-Stop:
    # Default-Start: S
    # Default-Stop:
    # X-Start-Before: procps udev-mtab urandom
    # Short-Description: UnionFS mode
    # Descrition: Shutdown process will not be required
    ### END INIT INFO
    # Copyright: Bernd Schubert <bernd.schubert@fastmail.fm>
    # BSD license, see LICENSE file for details
    FUSE_OPT="-o allow_other,use_ino,suid,dev,nonempty"
    CHROOT_PATH="/tmp/unionfs"
    UNION_OPT="-ocow,chroot=$CHROOT_PATH,max_files=32768"
    UBIN=/usr/bin/unionfs-fuse
    cd /boot
    file=noprotect
    if [ -e ${file} ]; then
            echo "${file} exists"
        exit 0
    fi
    mount -o remount,ro /dev/mmcblk0p1 /boot
    mount -t proc proc /proc
    mount -t tmpfs tmpfs /tmp
    mkdir -p $CHROOT_PATH/root
    mkdir -p $CHROOT_PATH/rw
    mkdir -p /tmp/union
    mount --bind / $CHROOT_PATH/root
    $UBIN $FUSE_OPT $UNION_OPT /rw=RW:/root=RO /tmp/union
    mount -t proc proc /tmp/union/proc
    cd /tmp/union
    mkdir oldroot
    pivot_root . oldroot
    mount -o remount,ro /dev/root /oldroot
    for d in dev run run/lock sys run/shm dev/pts boot
    do
    mount --bind /oldroot/$d /$d
    done
    init q
    /usr/local/sbin/a-unionfs-fuse-omit-pid.sh
    exit 0
    
[/code]

  4. スクリプト登録
[code]     $ sudo update-rc.d a-unionfs-fuse-live-cd defaults

    
[/code]

  5. 切換用スクリプト作成

    * $ sudo vim /usr/local/bin/noprotect
[code]         #!/bin/sh

        mount -o rw,remount /boot
        cd /boot
        if [ -e "protect" ]; then
            rm /boot/protect
        fi
        if [ -e "noprotect" ]; then
            echo "noprotect mode"
        else
            touch /boot/noprotect
            echo "noprotect mode"
        fi
        mount -o ro,remount /boot
        
[/code]

    * $ sudo vim /usr/local/bin/protect
[code]         #!/bin/sh

        mount -o rw,remount /boot
        cd /boot
        if [ -e "noprotect" ]; then
           rm /boot/noprotect
        fi
        if [ -e "protect" ]; then
           echo "protect mode"
        else
           touch /boot/protect
           echo "protect mode"
        fi
        mount -o ro,remount /boot
        
[/code]

  6. 実行権限付与
[code]     $ sudo chmod a+x /usr/local/bin/noprotect  
    $ sudo chmod a+x /usr/local/bin/protect
    
[/code]

  7. 再起動  
unionfs-fuse導入前より起動に時間がかかりますが  
正常に起動します。

  8. シャットダウン、または電源断を行い、その後SDカードの中を見るとすべてのファイルが消えています。

解決策をご存知の方、よろしくお願いいたします。




私も同じ症状に遭遇しました。  
結論としては、2017/3/4 現在の最新 rasbian イメージと unionfs 導入のサイトの情報には差異があり、そのままでは unionfs
を導入できないのではと思います。  
私も解決策を探りましたが時間切れで aufs を入れたカーネルのリビルドで ROM 化の対処を行いました。  
以下詳細です。

  * 対象 Raspi イメージ  
2017-01-11-raspbian-jessie.img

  * 作業日  
2017/3/2 - 3/3

  * 症状  
ご質問者様と同じように unionfs を他のサイトを参考に導入。最初のリブートはできるが２回目はできない。

調べた部分。

  * RAMDISK 化で /tmp を tmpfs にしており、それが悪いのかと思いやめてみた。また /dev/shm など今の Rasbian イメージに沿っていない部分も見つけたので微修正。繰り返しリブートはできるが unionfs 全く機能していない様子。
  * スクリプトのコマンドを root 権限で逐一実行すると pivot_root 命令でパラメータが違います、というエラーが出ている。リブートできない理由はおそらく root システムの変更がうまくいっていないためと判断した。
  * そうこういている間に、Raspi 実機での aufs を入れたカーネルのビルドに成功したので調査打ち切り。

以上です。

