teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

環境・要求事項を追記

2017/04/05 06:17

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -12,6 +12,14 @@
12
12
  同じような経験をされた方、いらっしゃいませんでしょうか?
13
13
  どのように解決に導いたか等、ご教示頂けると幸いです。
14
14
 
15
+ ■ 環境・要求事項
16
+ ** OS:Raspbian Kernel:4.4.38-v7+
17
+ ** 保存が必要なデータはUSBメモリに記憶する。
18
+ ** lazarusで作成したGUI画面を液晶に表示させる。
19
+ ** Webサーバ(lighttpd)を搭載し遠隔地からステータス表示・制御可能。
20
+ ** ラズパイのGPIO、GPIO-sirialを使用(外部デバイス制御の為)
21
+ ** 現在は開発の為、SSH,Sambaを使用しているが実際の使用時には不要。
22
+ ** 電源ブチギリ時のSDカード保護の為、SDカード全体をリードオンリーにしたい。
15
23
 
16
24
  ■ 発生している問題
17
25
  ** protectで起動した時、bootパーテーションが全て消去されている。

2

環境と再現手順追記。余計な情報消去。

2017/04/05 06:17

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -12,8 +12,142 @@
12
12
  同じような経験をされた方、いらっしゃいませんでしょうか?
13
13
  どのように解決に導いたか等、ご教示頂けると幸いです。
14
14
 
15
+
16
+ ■ 発生している問題
17
+ ** protectで起動した時、bootパーテーションが全て消去されている。
18
+ ** このとき、rootfsは全て正常でした。
19
+
20
+ ■ 再現手順
21
+ 1) SWAPサービス無効
22
+ ```
23
+ $ sudo apt-get install chkconfig
24
+ $ sudo chkconfig dphys-swapfile off
25
+ ```
26
+ 2) テンポラリファイル生成抑制
27
+ /etc/fstabを以下のように編集
28
+ ```
29
+ proc /proc proc defaults 0 0
30
+ /dev/mmcblk0p1 /boot vfat defaults 0 2
31
+ /dev/mmcblk0p2 / ext4 defaults,noatime 0 1
32
+ # a swapfile is not a swap partition, no line here
33
+ # use dphys-swapfile swap[on|off] for that
34
+ # ↓追加
35
+ tmpfs /tmp tmpfs defaults,size=32m 0 0
36
+ tmpfs /var/tmp tmpfs defaults,size=16m 0 0
37
+ tmpfs /var/log tmpfs defaults,size=32m 0 0
38
+ tmpfs /var/www/mrtg tmpfs defaults,size=2m 0 0
39
+ ```
40
+ 3) 一旦再起動してdf -hでtmpfsができていることを確認
41
+
42
+ 4) unionfs-fuseパッケージインストール
43
+ ```
44
+ $ sudo apt-get install unionfs-fuse
45
+ ```
46
+
47
+ 5) スクリプトのコピー
48
+ ```
49
+ $ sudo cp /usr/share/doc/unionfs-fuse/examples/S01a-unionfs-fuse-live-cd.sh /etc/init.d/a-unionfs-fuse-live-cd
50
+ $ sudo cp /usr/share/doc/unionfs-fuse/examples/rc.local.omit-pid.sh /usr/local/sbin/a-unionfs-fuse-omit-pid.sh
51
+ ```
52
+
53
+ 6) /etc/init.d/a-unionfs-fuse-live-cd を以下のようにする
54
+ ```
55
+ #!/bin/sh
56
+
57
+ ### BEGIN INIT INFO
58
+ # Provides: a-unionfs-fuse-live-cd
59
+ # Required-Start: mountall-bootclean
60
+ # Required-Stop:
61
+ # Default-Start: S
62
+ # Default-Stop:
63
+ # X-Start-Before: procps udev-mtab urandom
64
+ # Short-Description: UnionFS mode
65
+ # Descrition: Shutdown process will not be required
66
+ ### END INIT INFO
67
+
68
+ # Copyright: Bernd Schubert <bernd.schubert@fastmail.fm>
69
+ # BSD license, see LICENSE file for details
70
+ FUSE_OPT="-o allow_other,use_ino,suid,dev,nonempty"
71
+ CHROOT_PATH="/tmp/unionfs"
72
+ UNION_OPT="-ocow,chroot=$CHROOT_PATH,max_files=32768"
73
+ UBIN=/usr/bin/unionfs-fuse
74
+ cd /boot
75
+ file=noprotect
76
+ if [ -e ${file} ]; then
77
+ echo "${file} exists"
78
+ exit 0
79
+ fi
80
+ mount -o remount,ro /dev/mmcblk0p1 /boot
81
+ mount -t proc proc /proc
82
+ mount -t tmpfs tmpfs /tmp
83
+ mkdir -p $CHROOT_PATH/root
84
+ mkdir -p $CHROOT_PATH/rw
85
+ mkdir -p /tmp/union
86
+ mount --bind / $CHROOT_PATH/root
87
+ $UBIN $FUSE_OPT $UNION_OPT /rw=RW:/root=RO /tmp/union
88
+ mount -t proc proc /tmp/union/proc
89
+ cd /tmp/union
90
+ mkdir oldroot
91
+ pivot_root . oldroot
92
+ mount -o remount,ro /dev/root /oldroot
93
+ for d in dev run run/lock sys run/shm dev/pts boot
94
+ do
95
+ mount --bind /oldroot/$d /$d
96
+ done
97
+ init q
98
+ /usr/local/sbin/a-unionfs-fuse-omit-pid.sh
99
+ exit 0
100
+ ```
101
+ 7) initスクリプト有効化
102
+ ```
103
+ $ sudo update-rc.d a-unionfs-fuse-live-cd defaults
104
+ ```
105
+ 8) モード切替スクリプト作成(noprotect)
106
+ $ sudo vi /usr/local/bin/noprotec
107
+ ```
108
+ #!/bin/sh
109
+ mount -o rw,remount /boot
110
+ cd /boot
111
+ if [ -e "protect" ]; then
112
+ rm /boot/protect
113
+ fi
15
- これがダメなら aufs + fsprotectでのリードオンリーも考えて
114
+ if [ -e "noprotect" ]; then
16
- いますが、既にラズベリーパイに開発環境やwebサーバ等を入れて
115
+ echo "noprotect mode"
116
+ else
117
+ touch /boot/noprotect
118
+ echo "noprotect mode"
119
+ fi
120
+ mount -o ro,remount /boot
121
+ ```
122
+ 9) モード切替スクリプト作成(protect)
123
+ $ sudo vi /usr/local/bin/noprotec
124
+ ```
125
+ #!/bin/sh
126
+ mount -o rw,remount /boot
127
+ cd /boot
128
+ if [ -e "noprotect" ]; then
17
- セットアップ済みの為、カーネル構築からとなってしまう
129
+ rm /boot/noprotect
130
+ fi
18
- aufs + fsprotectの方法は、出来ればしたくない状況です。
131
+ if [ -e "protect" ]; then
132
+ echo "protect mode"
133
+ else
134
+ touch /boot/protect
135
+ echo "protect mode"
136
+ fi
137
+ mount -o ro,remount /boot
138
+ ```
139
+ 10) 権限付与
140
+ ```
141
+ $ sudo chmod a+x /usr/local/bin/noprotect
142
+ $ sudo chmod a+x /usr/local/bin/protect
143
+ ```
144
+
145
+ 11) Read Only モードに切り替え、再起動
146
+ ```
147
+ $ sudo protect
148
+ $ sudo reboot
149
+ ```
19
- (カーネルコンパイルするLinuxマシンが手元ないもあます)
150
+ ※この再起動時、通常再起動よ明らかに長い期間あった。
151
+ ※おそらくここで/bootパーテーションがクリアされていると推測される
152
+ ※この再起動後、/bootパーテーションは全て消去されており
153
+ ※この状態で再起動したのでそれ以降起動でき無かった。

1

Tag追加

2017/04/04 09:20

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
File without changes