rawdiskの操作を誤ると、対象のストレージを破壊してしまうことがありますので十分ご注意ください。マジで。
RaspberryPi謹製のSDカードは複数のOSがブートできるようになっています。手元にRaspbianをインストールして運用しているハードウェアがあり、このSDカードをMacBook Proのにマウントして読み書きしたい、というのが今回のお題です。
MacBook ProのSDカードスロットはUSBコントローラと接続されておらず、仮想マシンのUSBコントローラから見えないため通常の方法ではマウントすることが出来ません。しかし、Macのrawdiskとして設定することでマウントすることが出来ます。
SDカードをMacBook Proに挿すと次の3つのパーティションが見えます。
- RECOVERY
- boot
- disk1s6 (EXT4)
DiskUtilityで見るとこんな感じ。
disk1s6
がRaspbianのファイルシステムにあたるので、これをVirtualBoxのrawdiskとしてマウントします。
vmdkファイルの作成
rawdiskをマウントするにはvmdkファイルが必要なので、VBoxManage
コマンドを使用してraw.vmdk
を作成します。
cd ~/VirtualBox\ VMs/SomeVM/
sudo VBoxManage internalcommands createrawvmdk -filename ./raw.vmdk -rawdisk /dev/disk1s6
sudo chown username raw.vmdk # rootで作成されるのでchownする
次にVirtualBoxの設定からストレージを追加します。ハードディスクの追加から先ほど作成したraw.vmdk
を選択します。
vmdkの追加時にエラーが出る場合にはデバイスファイルのパーミッションが誤っているので、ログインユーザに変更してください(再マウントするとrootに戻るので変更しても大丈夫です)。
sudo chown username /dev/disk1*
仮想マシンを起動してsshログインし、ファイルシステムをマウントします。
sudo mount /dev/sdb /mnt
/dev/mapper/precise64-root on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
udev on /dev type devtmpfs (rw,mode=0755)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)
/dev/sda1 on /boot type ext2 (rw)
rpc_pipefs on /run/rpc_pipefs type rpc_pipefs (rw)
/dev/sdb on /mnt type ext4 (rw)
/mntにSDカードがマウントされました。やったー!
あわせて読みたい