树莓派 之 设置使用外置硬盘启动

本文转载于My Nook,仅供大家学习用~ 红色部分为我添加部分,方便大家阅读和使用代码.


整件事情是这样的:某一天我尝试在树莓派上安装一个 vim 的编辑器插件 YouCompleteMe,需要从源码编译。编译这个比较耗费内存,可能我分配的 SWAP 不够大(1024MB),导致内存不足,然后 sshd 就挂了。嗯,并且已经过去了一个小时我也没法连接上去。于是我就拔电源重启了,这下可好,SD 卡彻底启动不了了,估计是文件系统损坏之类的。上网搜了一下这种现象似乎非常常见,只要在断电时 SD 卡还在写入就可能出现。于是我就想到要把系统装在外置硬盘上。

首先硬件配置是这样的:我手上有 8GB 和 16GB 的 C10 SD 卡各一张,500GB 的移动硬盘一个(之前笔记本的机械硬盘,换 SSD 的时候拆下来装在移动硬盘盒里),有源 USB Hub 一个,树莓派一个。其中移动硬盘上有两个 NTFS 分区(Windows 的 C盘和 D盘)和一个 ext4 分区(很久以前的 Ubuntu 系统,所有数据都在里面)。

我想实现的效果是这样的:清空旧的 Windows C盘(90GB),分出 30GB 给 Raspbian,然后树莓派要从硬盘启动。

简单搜索了一下发现直接从硬盘启动是不行的,因为树莓派启动的时候固定是从 SD 卡的第一个分区(/boot)读取** config.txtcmdline.txt** 和 kernel.img 这三个文件。但是除此之外,各个外接设备的挂载点则是没有限制的。于是我们可以将** /boot **分区放在 SD 卡上,并设置为只读的,避免意外关机时损坏上面的文件系统;同时我们把系统的其他部分都放在外置硬盘上,通过 USB 连接到树莓派,这部分是可读写的。

我们首先按照正常方式,从树莓派的网站上下载 Raspbian 镜像,按照官方的指导,安装到 SD 卡上。这里简要说一下在 Mac OS X 上的安装方式:

Mac

# 首先将 SD 卡插入适配器,连接到 Mac
# 打开终端
# 在列出的磁盘中找到你的 SD 卡设备,例如 /dev/disk4
diskutil list
# unmount
diskutil unmountDisk /dev/disk4  # 这里替换成你的 SD 卡设备
# 找到你下载的镜像(解压的 .img 文件),写入到你的 SD 卡设备
sudo dd bs=1m if=image.img of=/dev/rdisk4  # 这里注意是 rdisk
# 写入完成后从 Finder 里弹出 SD 卡就好了

Linux(为我添加部分,考虑到大家不都是具有Mac的环境)

# 在列出设备中,找到你的SD卡设备
# fdisk -l 
# 将你的SD卡到挂载到/mnt/usb下
# mount -t vfat /dev/sdc /mnt/usb
# 找到那得img镜像,写入SD卡设备
# sudo dd bs=4M if=XXXX-raspbian.img of=/mnt/usb
# 最后拔出你的SD卡设备

然后按照正常方式进行第一次启动,也可以做一些简单设置的调整。我是接了键盘和显示器启动的,进去后首先打开** raspi-config** 把图形界面关掉了,然后打开了摄像头、I2C 和 SPI 设备,然后我就重启了。接下来我都是通过 ssh 进行的操作。

通过 USB 连接移动硬盘。sudo fdisk -l 看一下是哪个设备,一般都是 /dev/sda
之类的。

如果有不想要的分区需要删掉腾出空间的话,sudo fdisk /dev/sda
打开 fdisk 工具,把不要的分区删掉,新建一个 30GB 分区。具体怎么操作,交互模式下有帮助,注意不要删掉了想保留的分区即可。在你输入 w 命令执行写入之前,所有改动都是在内存中的,你觉得有问题的话,Ctrl-C 退出重来就好。
创建好分区之后格式化成 ext4:sudo mkfs.ext4 /dev/sda1

运行 sudo gdisk /dev/sda
进入 gdisk 工具的交互模式。在这里检视一下你想用于 Raspbian 的分区,获取到 UUID。以下例子来自 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” 后面那串字母,在这个例子中也就是 176ADF0D-357D-4C4B-ADC0-371342F444AB

接下来编辑** /boot/cmdline.txt**,将其中 root=/dev/mmcblk0p2 改为 **root=PARTUUID=分区的UUID **然后保存。

随后,编辑 **/etc/fstab 将 /boot **挂载为只读模式,将移动硬盘也添加进去,挂载为可读写。默认的内容是这样的:

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

更改之后内容大概像这样:

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

最后,将** /** 下的内容全部写入到移动硬盘中。以我自己的配置为例,使用 /dev/sda1 分区:

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

因为 Raspbian 默认是将 SD 卡的第二个分区(也就是 /dev/mmcblk0p2)挂载到 /的,所以我们直接从这个分区读取,写入到目标分区就可以。

写入完成之后,/dev/sda1 的大小与 /dev/mmcblk0p2 是完全一致的,会远远小于你创建这个分区时指定的大小。可以使用** sudo resize2fs /dev/sda1 **来展开到完整的大小。

接下来重启就好了。

在过程中如果不慎修改错了参数,或者将不正确的分区挂载为只读了,不必惊慌,也不需要马上重装系统。只要将树莓派断电,SD 卡拔出来连接到别的电脑上,修改** /boot/cmdline.txt** 里的参数,改为默认的挂载 SD 卡第二分区即可。重启后可以通过 sudo mount -o remount,rw /dev/sda1 将 **/etc/fstab **中指定的分区重新挂载为可读写模式来进行修改。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容