为什么要从硬盘启动呢?主要的原因是因为如果树莓派有时突然断电,如果内存卡还在写入的话,就会导致文件损坏,然后系统无法启动了。另外还有一点就是,我嫌弃内存卡的读写速度还是太慢了。

所以作为一个喜欢折腾的人,就肯定要折腾一番了,同时这几天买的4T红盘到了,也该把树莓派做成一个NAS来使用了。

好了,我们进入正题,树莓派从USB硬盘启动,那么我们还是脱离不了内存卡,因为树莓派通电后,首先读取的是内存卡的引导分区,然后修改内存卡的启动分区cmdline.txt 文件,让其从硬盘启动。

步骤1,格式化硬盘,同步系统到硬盘:

准备一快硬盘,使用parted进行分区,分区表选择GPT,为了更好的支持UUID挂载,为什么不直接使用:/dev/sda1 这样的形式挂载硬盘?而要使用UUID的方式呢??

主要考虑到如果引导时指定的是sda1,显然如果有新的存储设备连接到树莓派,开机启动时很可能因为sda被占用而造成不能开机问题,也是本文的重要的中心。

分区的过程略过,可以Google到好多的教程...

最后把分区格式化成ext4的文件系统:

//格式化分区
sudo mke2fs -t ext4 -L rootfs /dev/sda1
//挂载分区
mount -t ext4 /dev/sda1 /mnt
//把内存卡里面的/目录下的全部文件拷贝到移动硬盘的启动分区
sudo rsync -axv / /mnt

步骤2,修改树莓派引导分区:

把内存卡拔下来,使用读卡器接入到一台电脑,打开/boot分区下的:/boot/cmdline.txt 文件,进行修改。

原来为:

dwc_otg.lpm_enable=0 console=tty1 console=ttyAMA0,115200 root=/dev/sda1 rootfstype=ext4 elevator=deadline rootwait rootdelay=5 fbcon=map:10 fbcon=font:ProFont6x11 logo.nologo

修改为:

dwc_otg.lpm_enable=0 console=tty1 console=ttyAMA0,115200 root=UUID=5aadc9b3-42f2-4ec5-94cd-de8ff9cb4cce rootfstype=ext4 elevator=deadline rootwait rootdelay=5 fbcon=map:10 fbcon=font:ProFont6x11 logo.nologo

网上的教程大对数都是只到这里就没用了。 按照这一的修改,我修改完后树莓派的系统无法启动了,在启动界面光标一直闪烁,无法进入系统,失败~~~~

失败了吗?如果失败的,那么本文就没用存在的必要了。有问题必须是找google大叔的,经过半天的搜索,和N多次失败的尝试。 google上有一些关于: Linux raspberrypi 3.10.18+ 版本的解决方法,说是树莓派的系统的内核的问题,要把:CONFIG_BLK_DEV_INITRD 设置为 CONFIG_BLK_DEV_INITRD=y,但是我去找了我的树莓派的系统里面,压根没有这个/proc/config.gz文件,失败。

使用uname -a,得知我的系统版本是Linux raspberrypi 4.1.13-v7+ 的。 最后我终于在GitHub上找到了一条issue:https://github.com/raspberrypi/linux/issues/392 里面说了: kernel initrd support

好吧,根据这个,我们找到了另外一个帖子: https://www.raspberrypi.org/forums/viewtopic.php?f=66&t=113841 里面有一个回复,是说要开启initrd的:

sudo -i
cd /boot
mkinitramfs -o initrd.sda
vim config.txt
//在config.txt文件的最底部添加: initramfs initrd.sda
reboot //最后重启系统

树莓派能正常启动了,问题解决,检查分区挂载,也没问题; 最后附上一张我的树莓派挂载的硬盘的截图,我挂载了2快硬盘,一块以前的旧电脑拆下来的西数500GB的硬盘,一块4T的红盘。