【Raspberry Pi】マウントするファイルシステムを間違えて起動できなくなった
ラズパイを買ったので
RaspberryPi 3 にUSBの外付けHDD(NTFSフォーマット)を接続する - min117の日記を参考に、外付けHDDをマウントしたところ、ntfs-3g
をインストール後reboot
したらラズパイの起動ができなくなりました。
ファイルシステムに明るくないため、手こずりましたが、無事復旧したのでログを残します。
環境情報
Raspberry Pi 3 Model b+
pi@raspberrypi:~ $ lsb_release -a No LSB modules are available. Distributor ID: Raspbian Description: Raspbian GNU/Linux 9.6 (stretch) Release: 9.6 Codename: stretch
発生事象
etc/fstab
に以下を追記後、再起動したら起動できなくなりました。
# etc/fstab UUID="<MY UUID>" /volumes/ ntfs-3g defaults,iocharset=utf8,umask=000 0 0
より具体的な事象は、raspi 3 が起動しなくなった。 - Raspberry Pi Forums
と同じで、起動後、以下メッセージが出るもののctrl + D
やEnter
を押しても同メッセージが出続け、先に進めなくなりました。
You are in emergency mode, After loging in, type "jounalctl -xb"to view system logs, "systemctl reboot" to rebott, "systemctl default" or ^D to try again to boot into defalult mode. Cannot open access to console, the root account is locked. See sulongin(8) man page for more details. Press Enter to continue.
完全に/etc/fstab
でファイルシステムの指定を間違えてしまい、起動できなくなってしまったパターンです。やらかしです。
/etc/fstab
を戻そうにも起動すらできないので、Macで復旧します。
復旧
方針
幸い所有しているMacBook ProにSDカードスロットがあったので、VirtualBox上のUbuntuにSDカードを認識させる · Yoshi's Notesを参考にVirtualBoxでUbuntuを立ち上げて、/etc/fstab
を編集できるようにします。
環境情報
# VirtualBox バージョン 5.2.26 r128414 (Qt5.6.3)
SDカードを認識させるのにExtension Packが必要なので、Download VirtualBox (Old Builds)から自身のVirtualBoxのバージョンに合ったExtension Packをインストールします。 なお、バージョンが異なるとインストールに失敗します。
UbuntuのOS情報は以下の通りです。
vagrant@vagrant-ubuntu-trusty-64:~$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=14.04 DISTRIB_CODENAME=trusty DISTRIB_DESCRIPTION="Ubuntu 14.04.5 LTS"
復旧手順
Mac側
SDカードをMacに挿入します(MicroSDなので変換アダプタ使いました)。
Macからdiskutil
を確認します。
以下のように当環境では、SDカードは/dev/disk2
で認識されていることが確認できます。
# Mac ❯ diskutil list (中略) /dev/disk2 (internal, physical): #: TYPE NAME SIZE IDENTIFIER 0: FDisk_partition_scheme *31.9 GB disk2 1: Windows_FAT_16 RECOVERY 1.7 GB disk2s1 2: Linux 33.6 MB disk2s5 3: Windows_FAT_32 boot 72.4 MB disk2s6 4: Linux 30.1 GB disk2s7
mount
コマンドでも確認したところ、/dev/disk2
に関連するパーティションは以下の2つ(RECOVERY
とboot
)でした。
# Mac ❯ mount (中略) /dev/disk2s1 on /Volumes/RECOVERY (msdos, local, nodev, nosuid, noowners) /dev/disk2s6 on /Volumes/boot (msdos, local, nodev, nosuid, noowners)
ディスクユーティリティからも以下のように確認できます。
次にディスクユーティリティからRECOVERY
/boot
をマウント解除
します。
(スクショを残し忘れましたが、上記2画面RECOVERY
/boot
の画面上部にマウント解除
のボタンがあります)
続いて、VirtualBox vmdkファイルを作成し、権限を変更します。
(本当は777
にしたくないですが、元記事と変えてハマるのも嫌なので、777
で。。。)
# Mac ❯ sudo VBoxManage internalcommands createrawvmdk -filename ./sd-card.vmdk -rawdisk /dev/disk2 ❯ sudo chmod 777 sd-card.vmdk ❯ sudo chmod 777 /dev/disk2
作成したvmdkファイルについて、VirtualBox上でハードディスクの追加
を行います。
既存のディスクを選択
します。
先ほど作成したsd-card.vmdk
を開きます。
ちなみにマウント解除
したはずなんですが、少し時間を開けたら再度マウントされてしまっていて、以下のように失敗しました。
慌てず、ディスクユーティリティから再度マウント解除
すればOKです。
成功すると以下のようにsd-card.vmdk
が認識されます。
Ubuntu側
無事追加できたので、vagrant up
しましょう。
参考までですが、一度以下のように起動に失敗しました。
❯ vagrant up (中略) ==> default: Booting VM... There was an error while executing `VBoxManage`, a CLI used by Vagrant for controlling VirtualBox. The command and stderr is shown below. Command: ["startvm", "84b91ede-c9fc-45bb-a45a-1f2dfbddee39", "--type", "headless"] Stderr: VBoxManage: error: VD: error VERR_RESOURCE_BUSY opening image file '/Users/xxx/sd-card.vmdk' (VERR_RESOURCE_BUSY). VBoxManage: error: Failed to open image '/Users/xxx/sd-card.vmdk' in read-write mode (VERR_RESOURCE_BUSY). VBoxManage: error: AHCI: Failed to attach drive to Port1 (VERR_RESOURCE_BUSY) VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component ConsoleWrap, interface IConsole
こちらもRECOVERY
/boot
がMacにマウントされてしまっていることが原因なので、ディスクユーティリティから再度マウント解除
すればOKです。
さて、vagrant ssh
してからlsblk
を実行し、Ubuntu上でSDカードが認識できたことを確認します。
vagrant@vagrant-ubuntu-trusty-64:~$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 40G 0 disk └─sda1 8:1 0 40G 0 part / sdb 8:16 0 29.7G 0 disk ├─sdb1 8:17 0 1.6G 0 part ├─sdb2 8:18 0 1K 0 part ├─sdb5 8:21 0 32M 0 part ├─sdb6 8:22 0 69M 0 part └─sdb7 8:23 0 28.1G 0 part
sdb
として認識できていますね。これをマウントしていきます。
ラズパイ上では何も考えずにntfs-3g
にマウントしようとして失敗したので、今回はちゃんとファイルシステムのTYPEを確認します。
vagrant@vagrant-ubuntu-trusty-64:/volumes$ sudo blkid /dev/sda1: LABEL="cloudimg-rootfs" UUID="xxx" TYPE="ext4" /dev/sdb1: LABEL="RECOVERY" UUID="xxx" TYPE="vfat" /dev/sdb5: LABEL="SETTINGS" UUID="xxx" TYPE="ext4" /dev/sdb6: LABEL="boot" UUID="xxx" TYPE="vfat" /dev/sdb7: LABEL="root" UUID="xxx" TYPE="ext4"
今回のゴールは「/etc/fstab
を編集すること」なので、LABELがroot
になっている/dev/sdb7
を見ます。
TYPEはext4
なので、ext4
として/volumes/sdcard7
にマウントします。
(/volumes/sdcard7
が存在しないと思うので、事前にmkdir
しておいてください)
vagrant@vagrant-ubuntu-trusty-64:/volumes$ sudo mount -t ext4 /dev/sdb7 /volumes/sdcard7
無事マウントできました。
今回のゴールであるetc/fstab
が編集できます。以下記述を削除しましょう。
UUID="<MY UUID>" /volumes/ ntfs-3g defaults,iocharset=utf8,umask=000 0 0
この状態でSDカードをラズパイに挿し、起動したら復旧しました。
etc/fstab
を正しく設定する
復旧できたので正しい設定をしましょう。
先ほど同じようにラズパイ上でsudo blkid
してファイルシステムのTYPEを確認します。
$ sudo blkid /dev/sda1: UUID="<MY UUID>" TYPE="vfat" PARTUUID="xxx"
vfat
なので、ntfs-3g
ではなくvfat
でマウントします。
# etc/fstab UUID="<MY UUID>" /volumes/ vfat defaults,iocharset=utf8,umask=000 0 0
これで再起動すれば、途中で止まることなく起動でき、/volumes/BTC/
に外付けHDDがマウントされているはずです。