这个网址好像被墙了!!
我来复制粘贴一下吧
r-pi的启动是通过读取SD卡上/boot分区,参看其中的配置文件参数来启动系统。办法就是修改cmdline.txt中的/root位置 (/boot分区fat格式,windows可读)
dwc_otg.fiq_fix_enable=1 sdhci-bcm2708.sync_after_dma=0 dwc_otg.lpm_enable=0
console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait
其中 root=/dev/mmcblk0p2 改为 U盘上的根分区 root=/dev/sda2
我的U盘写入的是另外一个系统,两个分区,sda1为/boot,sda2为/,自行重分区可以去掉这个/boot只要一个/就行。可以理解为PC系统上的主板Bios就是这个SD卡上的/boot分区,启动盘就是指向的USB设备。
这是我的分区结构
pi@raspberrypi:/boot$ df
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 1804128 1357844 354636 80% /
/dev/root 1804128 1357844 354636 80% /
devtmpfs 62028 0 62028 0% /dev
tmpfs 12420 220 12200 2% /run
tmpfs 5120 0 5120 0% /run/lock
tmpfs 24820 0 24820 0% /run/shm
/dev/mmcblk0p1 76630 37254 39376 49% /boot
可以看到,SD卡mmcblk0p1就是sd卡上那个/boot分区,修改掉的cmdline.txt文件也在其中。U盘包含了真个系统,所有读写都在U盘上和SD卡无关。
pi@raspberrypi:/boot$ sudo dd if=/dev/mmcblk0p1 of=/dev/null bs=8k count=10000
9600+0 records in
9600+0 records out
78643200 bytes (79 MB) copied, 6.54728 s, 12.0 MB/s
SD卡读取速度12MB/s
pi@raspberrypi:/mnt$ sudo dd if=/dev/sda2 of=/dev/null bs=8k count=10000
10000+0 records in
10000+0 records out
81920000 bytes (82 MB) copied, 3.61226 s, 22.7 MB/s
U盘读取速度22.7MB/s 几乎是前者两倍
为何要这样做一目了然,使用U盘上的系统大大提升了系统磁盘性能。另外SD卡因为兼容性问题,不少的卡无法使用,同时速度达不到原本的性能,比如UHS-I超Class 10规范的卡在raspberry pi上常常只能获得20MB/s不到的速度,而usb就没有兼容性问题,特别是usb 3.0开始普及的年代,向下兼容的特性就算在usb2.0上,写入也能超过20,读取达到40以上。另外SD卡槽相对来说比较易损,usb可以通过延长线提高接口物理寿命。U盘价格偏低,寿命比SD卡稍好。
另外可以使用USB外置硬盘作为系统,那性能将无可匹敌,不再成为瓶颈。
值得注意的是,一些官方系统中的脚本命令没有指向USB设备,需要用sed命令临时修改指向,比如raspi-config中自动重新分区扩容
cp /usr/bin/raspi-config ~
sed -i 's/mmcblk0p2/sda2/' ~/raspi-config
sed -i 's/mmcblk0/sda/' ~/raspi-config
sudo ~/raspi-config
我另外还想拥有一个功能,就是不插U盘的时候自动启动SD卡上的系统,插U盘的时候就启动U盘上的系统,这估计要修改内核重新编译了。不过可以另外一个角度来解决。选用一个带usb接口开关的usb hub,SD卡指定从U盘启动,一排带系统的U盘都插在上面,要哪个系统就开那个开关,其他关闭就行,这个可以有。 |