|
看到很多xdjms讨论LiveUSB的问题,就把自己的制作方法写下来,希望大家喜欢,多提提建议。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- 本文假设将安装在硬盘第一分区的Archlinux迁移到U盘的第一分区,并且整个系统都包含在根分区,请按照实际情况操作。
- 本文建议使用 [color="Blue"]UUID 来表示分区路径。
UUID 简明 FAQ
- 为什么要使用UUID来表示分区?
许多接触 linux 比较早的 linuxers 可能还记得,以前的硬盘路径都表示为 /dev/hdX,而现在一般为 /dev/sdX,但总有人会遇到特殊情况。而到了移动硬盘上,这个问题变得更加复杂。
为了从 hdX 和 sdX 的痛苦中解脱出来,请使用 UUID。而且,UUID 不仅仅可以表示分区,还涵盖了LVM和其它一些设备。
- 一个分区的 UUID 路径是怎样表示的?
形如 “/dev/disk/by-uuid/b72a313a-e6f0-44e5-a96b-b95a812bf0a5”,后面的数字为此分区的 UUID。
- 怎样获得一个设备的 UUID 路径?
1. 如果你知道这个设备的普通路径,如 /dev/sda1,使用命令 “vol_id -u /dev/sda1”,将获得其UUID,在UUID的前面加上 “/dev/disk/by-uuid/”就得到了这个设备的UUID路径。
2. 如果你不知道这个设备的普通路径,使用命令“ls -l /dev/disk/by-uuid/”将列出所有磁盘设备文件对应的UUID。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- 复制整个系统
启动到要迁移的 Archlinux 之外的任一系统,执行以下命令。
- mkdir /mnt/{sda1,sdb1}
- mount /dev/sda1 /mnt/sda1
- mount /dev/sdb1 /mnt/sdb1
- cp --preserv=all -r /mnt/sda1/ /mnt/sdb1/
复制代码
- 生成支持 USB 存储设备的内核
编辑 /mnt/sdb1/etc/mkinitcpio.conf,在类似以下行
- HOOKS="base udev autodetect pata scsi sata filesystems usbinput keymap"
复制代码
中加入 “usb”。如果要使用 LVM,加入 “lvm2”。
执行以下命令。
- chroot /mnt/sdb1/
- mkinitcpio -p kernel26
复制代码
- 将 GRUB 安装到 USB 存储设备
确保 /mnt/sdb1/boot/grub 中包含所需的启动文件,如果没有,可以从 /mnt/sdb1/usr/lib/grub/i386-pc/ 复制一份。
编辑 /mnt/sdb1/boot/grub/menu.lst,修改 Archlinux 的启动条目。将 “root (hd0,0)” 修改为 “root (hd1,0)”。在内核参数中加入 “rootdelay=X”(X的单位是秒,实测最小值为8),并将 “root=” 后的设备路径修改为 /dev/sda1 的 UUID 路径。
注意:
在 Debian/Ubuntu 类发行版中,有一种形如 “root=UUID=b72a313a-e6f0-44e5-a96b-b95a812bf0a5”(其后数字为UUID)来表示根分区的方法,仅限于此类发行版专用。
执行以下命令。
进入 GRUB 命令行后,执行以下命令。
- root (hd1,0)
- setup (hd1)
- quit
复制代码
- 修改 fstab
编辑 /mnt/sdb1/etc/fstab,将其中的路径替换为相应的U盘分区的 UUID 路径。
|
|