把树莓派的系统迁移到U盘上

怎样去从U盘启动你的树莓派3?

不再需要SD卡了,况且SD卡的寿命应该没有U盘的寿命久…
这个教程将引导你如何让你的树莓派3从USB存储设备启动,例如U盘。
这些功能是具有实验性的并且可能并不完全的在所有的U盘设备中工作。

USB启动模式的设置

Pi要从U盘启动,它必须要先允许在配置中的USB启动模式。允许这些配置需要特殊的start.elbootcode.bin文件,它们能在rpi-updatenext分支中安装上。

你需要一个安装在SD卡中的Raspbian系统,并且用它去启动树莓派,去这个网站下载,并且在windows下用Win32DiskImager刻录,或者在Linux中用 dd刻录。

首先准备/boot目录中的启动选项文件(实验性的)

如果你的系统是raspbian lite,在使用这些命令之前你需要安装rpi-update:

1
2
$ sudo apt-get update; sudo apt-get install rpi-update
$ sudo BRANCH=next rpi-update

这个时候就把树莓派更新设置成了下一个分支。

用下面的代码开启USB启动模式:

1
echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt

这个命令输完之后,在/boot/config.txt的文件中的最后一行加上了program_usb_boot_mode=1

重启树莓派sudo reboot,再输入一下命令检查一下分支是否已经切换了。

1
2
$ vcgencmd otp_dump | grep 17:
17:3020000a

只有输出为0x3020000a才是正确的。

只要你愿意,你永远可以在/boot/config.txt去掉这一行program_usb_boot_mode=1(确保没有空行),然后你就依旧可以继续用SD卡中的系统了。

U盘的准备工作

现在已经开启从U盘启动了,在插入U盘之前需要做一些准备工作,将U盘分区,把原来的系统同步到U盘中,而不是重新下载系统刻录。源设备(SD卡)一般情况下是/dev/mmcblk0,目的设备(U盘)一般是/dev/sda。
如果你搞混了,建议用以下命令确认一下。

1
$sudo fdisk -l | grep sd

然后使用 parted命令分区SD卡

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sudo parted /dev/sda
(parted) mktable msdos
Warning: The existing disk label on /dev/sda will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Yes
(parted) mkpart primary fat32 0% 100M
(parted) mkpart primary ext4 100M 100%
(parted) print
Model: SanDisk Ultra (scsi)
Disk /dev/sda: 30.8GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 99.6MB 98.6MB primary fat32 lba
2 99.6MB 30.8GB 30.7GB primary ext4 lba

如果正常,print之后应该是差不多的。
然后再创建boot和根文件系统

1
2
sudo mkfs.vfat -n BOOT -F 32 /dev/sda1
sudo mkfs.ext4 /dev/sda2

挂载目标文件系统,并且拷贝正在SD卡中运行的raspbian系统到里面去。

1
2
3
4
5
6
sudo mkdir /mnt/target
sudo mount /dev/sda2 /mnt/target/
sudo mkdir /mnt/target/boot
sudo mount /dev/sda1 /mnt/target/boot/
sudo apt-get update; sudo apt-get install rsync
sudo rsync -ax --progress / /boot /mnt/target

重建ssh keys

1
2
3
4
5
6
7
8
9
10
11
cd /mnt/target
sudo mount --bind /dev dev
sudo mount --bind /sys sys
sudo mount --bind /proc proc
sudo chroot /mnt/target
rm /etc/ssh/ssh_host*
dpkg-reconfigure openssh-server
exit
sudo umount dev
sudo umount sys
sudo umount proc

编辑/boot/cmdline.txt

1
sudo sed -i "s,root=/dev/mmcblk0p2,root=/dev/sda2," /mnt/target/boot/cmdline.txt

同样编辑一下fstab

1
sudo sed -i "s,/dev/mmcblk0p,/dev/sda," /mnt/target/etc/fstab

最后卸载目标系统,关掉树莓派,再次开机的时候拔掉SD卡,就可以用U盘启动树莓派了。

1
2
3
4
cd ~
sudo umount /mnt/target/boot
sudo umount /mnt/target
sudo poweroff

仅仅只能在Pi3代使用

关于boot的代码只在BCD2837上有(也就是raspberry pi 3 这一代)。

翻译源

here

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×