樹(shù)莓派 之 設(shè)置使用外置硬盤(pán)啟動(dòng)

本文轉(zhuǎn)載于My Nook,僅供大家學(xué)習(xí)用~ 紅色部分為我添加部分,方便大家閱讀和使用代碼.


整件事情是這樣的:某一天我嘗試在樹(shù)莓派上安裝一個(gè) vim 的編輯器插件 YouCompleteMe,需要從源碼編譯。編譯這個(gè)比較耗費(fèi)內(nèi)存,可能我分配的 SWAP 不夠大(1024MB),導(dǎo)致內(nèi)存不足,然后 sshd 就掛了。嗯,并且已經(jīng)過(guò)去了一個(gè)小時(shí)我也沒(méi)法連接上去。于是我就拔電源重啟了,這下可好,SD 卡徹底啟動(dòng)不了了,估計(jì)是文件系統(tǒng)損壞之類的。上網(wǎng)搜了一下這種現(xiàn)象似乎非常常見(jiàn),只要在斷電時(shí) SD 卡還在寫(xiě)入就可能出現(xiàn)。于是我就想到要把系統(tǒng)裝在外置硬盤(pán)上。

首先硬件配置是這樣的:我手上有 8GB 和 16GB 的 C10 SD 卡各一張,500GB 的移動(dòng)硬盤(pán)一個(gè)(之前筆記本的機(jī)械硬盤(pán),換 SSD 的時(shí)候拆下來(lái)裝在移動(dòng)硬盤(pán)盒里),有源 USB Hub 一個(gè),樹(shù)莓派一個(gè)。其中移動(dòng)硬盤(pán)上有兩個(gè) NTFS 分區(qū)(Windows 的 C盤(pán)和 D盤(pán))和一個(gè) ext4 分區(qū)(很久以前的 Ubuntu 系統(tǒng),所有數(shù)據(jù)都在里面)。

我想實(shí)現(xiàn)的效果是這樣的:清空舊的 Windows C盤(pán)(90GB),分出 30GB 給 Raspbian,然后樹(shù)莓派要從硬盤(pán)啟動(dòng)。

簡(jiǎn)單搜索了一下發(fā)現(xiàn)直接從硬盤(pán)啟動(dòng)是不行的,因?yàn)闃?shù)莓派啟動(dòng)的時(shí)候固定是從 SD 卡的第一個(gè)分區(qū)(/boot)讀取** config.txtcmdline.txt** 和 kernel.img 這三個(gè)文件。但是除此之外,各個(gè)外接設(shè)備的掛載點(diǎn)則是沒(méi)有限制的。于是我們可以將** /boot **分區(qū)放在 SD 卡上,并設(shè)置為只讀的,避免意外關(guān)機(jī)時(shí)損壞上面的文件系統(tǒng);同時(shí)我們把系統(tǒng)的其他部分都放在外置硬盤(pán)上,通過(guò) USB 連接到樹(shù)莓派,這部分是可讀寫(xiě)的。

我們首先按照正常方式,從樹(shù)莓派的網(wǎng)站上下載 Raspbian 鏡像,按照官方的指導(dǎo),安裝到 SD 卡上。這里簡(jiǎn)要說(shuō)一下在 Mac OS X 上的安裝方式:

Mac

# 首先將 SD 卡插入適配器,連接到 Mac
# 打開(kāi)終端
# 在列出的磁盤(pán)中找到你的 SD 卡設(shè)備,例如 /dev/disk4
diskutil list
# unmount
diskutil unmountDisk /dev/disk4  # 這里替換成你的 SD 卡設(shè)備
# 找到你下載的鏡像(解壓的 .img 文件),寫(xiě)入到你的 SD 卡設(shè)備
sudo dd bs=1m if=image.img of=/dev/rdisk4  # 這里注意是 rdisk
# 寫(xiě)入完成后從 Finder 里彈出 SD 卡就好了

Linux(為我添加部分,考慮到大家不都是具有Mac的環(huán)境)

# 在列出設(shè)備中,找到你的SD卡設(shè)備
# fdisk -l 
# 將你的SD卡到掛載到/mnt/usb下
# mount -t vfat /dev/sdc /mnt/usb
# 找到那得img鏡像,寫(xiě)入SD卡設(shè)備
# sudo dd bs=4M if=XXXX-raspbian.img of=/mnt/usb
# 最后拔出你的SD卡設(shè)備

然后按照正常方式進(jìn)行第一次啟動(dòng),也可以做一些簡(jiǎn)單設(shè)置的調(diào)整。我是接了鍵盤(pán)和顯示器啟動(dòng)的,進(jìn)去后首先打開(kāi)** raspi-config** 把圖形界面關(guān)掉了,然后打開(kāi)了攝像頭、I2C 和 SPI 設(shè)備,然后我就重啟了。接下來(lái)我都是通過(guò) ssh 進(jìn)行的操作。

通過(guò) USB 連接移動(dòng)硬盤(pán)。sudo fdisk -l 看一下是哪個(gè)設(shè)備,一般都是 /dev/sda
之類的。

如果有不想要的分區(qū)需要?jiǎng)h掉騰出空間的話,sudo fdisk /dev/sda
打開(kāi) fdisk 工具,把不要的分區(qū)刪掉,新建一個(gè) 30GB 分區(qū)。具體怎么操作,交互模式下有幫助,注意不要?jiǎng)h掉了想保留的分區(qū)即可。在你輸入 w 命令執(zhí)行寫(xiě)入之前,所有改動(dòng)都是在內(nèi)存中的,你覺(jué)得有問(wèn)題的話,Ctrl-C 退出重來(lái)就好。
創(chuàng)建好分區(qū)之后格式化成 ext4:sudo mkfs.ext4 /dev/sda1
。
運(yùn)行 sudo gdisk /dev/sda
進(jìn)入 gdisk 工具的交互模式。在這里檢視一下你想用于 Raspbian 的分區(qū),獲取到 UUID。以下例子來(lái)自 Stefan's Blog

root@raspberrypi:/home/pi# gdisk /dev/sda
GPT fdisk (gdisk) version 0.8.5

Partition table scan:
  MBR: hybrid
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with hybrid MBR; using GPT.

Command (? for help): i
Partition number (1-3): 2
Partition GUID code: 0FC63DAF-8483-4772-8E79-3D69D8477DE4 (Linux filesystem)
Partition unique GUID: 176ADF0D-357D-4C4B-ADC0-371342F444AB
First sector: 2099200 (at 1.0 GiB)
Last sector: 23070719 (at 11.0 GiB)
Partition size: 20971520 sectors (10.0 GiB)
Attribute flags: 0000000000000000
Partition name: ''

Command (? for help): q

UUID 是跟在 “Partition unique GUID” 后面那串字母,在這個(gè)例子中也就是 176ADF0D-357D-4C4B-ADC0-371342F444AB

接下來(lái)編輯** /boot/cmdline.txt**,將其中 root=/dev/mmcblk0p2 改為 **root=PARTUUID=分區(qū)的UUID **然后保存。

隨后,編輯 **/etc/fstab 將 /boot **掛載為只讀模式,將移動(dòng)硬盤(pán)也添加進(jìn)去,掛載為可讀寫(xiě)。默認(rèn)的內(nèi)容是這樣的:

proc            /proc           proc    defaults                   0       0
/dev/mmcblk0p1  /boot           vfat    defaults                   0       2
/dev/mmcblk0p2  /               ext4    defaults,noatime           0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that

更改之后內(nèi)容大概像這樣:

proc            /proc           proc    defaults                    0       0
/dev/mmcblk0p1  /boot           vfat    ro                          0       2
/dev/sda1       /               ext4    defaults,errors=remount-ro  0       1
#/dev/mmcblk0p2  /               ext4    defaults,noatime           0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that

最后,將** /** 下的內(nèi)容全部寫(xiě)入到移動(dòng)硬盤(pán)中。以我自己的配置為例,使用 /dev/sda1 分區(qū):

dd if=/dev/mmcblk0p2 of=/dev/sda1

因?yàn)?Raspbian 默認(rèn)是將 SD 卡的第二個(gè)分區(qū)(也就是 /dev/mmcblk0p2)掛載到 /的,所以我們直接從這個(gè)分區(qū)讀取,寫(xiě)入到目標(biāo)分區(qū)就可以。

寫(xiě)入完成之后,/dev/sda1 的大小與 /dev/mmcblk0p2 是完全一致的,會(huì)遠(yuǎn)遠(yuǎn)小于你創(chuàng)建這個(gè)分區(qū)時(shí)指定的大小??梢允褂?* sudo resize2fs /dev/sda1 **來(lái)展開(kāi)到完整的大小。

接下來(lái)重啟就好了。

在過(guò)程中如果不慎修改錯(cuò)了參數(shù),或者將不正確的分區(qū)掛載為只讀了,不必驚慌,也不需要馬上重裝系統(tǒng)。只要將樹(shù)莓派斷電,SD 卡拔出來(lái)連接到別的電腦上,修改** /boot/cmdline.txt** 里的參數(shù),改為默認(rèn)的掛載 SD 卡第二分區(qū)即可。重啟后可以通過(guò) sudo mount -o remount,rw /dev/sda1 將 **/etc/fstab **中指定的分區(qū)重新掛載為可讀寫(xiě)模式來(lái)進(jìn)行修改。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容