Arch 系统迁移
买了新硬盘,怎么可以吃灰呢?
制作 Arch Live
首先下载新镜像。
# 用U盘替换 /dev/sdx,如 /dev/sdb。(不要加上数字,也就是说,不要键入 /dev/sdb1 之类的东西)
dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress && sync
分区
1. 查看分区信息
首先查看当前系统的分区:
fdisk -l
得到磁盘信息:
# 当前磁盘
Disk /dev/nvme0n1:476.94 GiB
设备 起点 末尾 扇区 大小 类型
/dev/nvme0n1p1 2048 2099199 2097152 1G EFI 系统
/dev/nvme0n1p2 2099200 35653631 33554432 16G Linux swap
/dev/nvme0n1p3 35653632 1000215182 964561551 459.9G Linux 文件系统
# 新磁盘
Disk /dev/nvme1n1:476.94 GiB
2. 新磁盘修改分区
首先进入新磁盘:
fdisk /dev/nvme1n1
根据提示,依次执行:
命令(输入 m 获取帮助):n
分区号 (1-128, 默认 1):
第一个扇区 (2048-1000215182, 默认 2048):
最后一个扇区,+/-sectors 或 +size{K,M,G,T,P} (2048-1000215182, 默认 1000214527): +1G
创建了一个新分区 1,类型为“Linux filesystem”,大小为 1 GiB。
命令(输入 m 获取帮助):n
分区号 (2-128, 默认 2):
第一个扇区 (2099200-1000215182, 默认 2099200):
最后一个扇区,+/-sectors 或 +size{K,M,G,T,P} (2099200-1000215182, 默认 1000214527): +16G
创建了一个新分区 2,类型为“Linux filesystem”,大小为 16 GiB。
命令(输入 m 获取帮助):n
分区号 (3-128, 默认 3):
第一个扇区 (35653632-1000215182, 默认 35653632):
最后一个扇区,+/-sectors 或 +size{K,M,G,T,P} (35653632-1000215182, 默认 1000214527):
创建了一个新分区 3,类型为“Linux filesystem”,大小为 459.9 GiB。
命令(输入 m 获取帮助):t
分区号 (1-3, 默认 3): 1
分区类型或别名(输入 L 列出所有类型):L
分区类型或别名(输入 L 列出所有类型):1
已将分区“Linux filesystem”的类型更改为“EFI System”。
命令(输入 m 获取帮助):t
分区号 (1-3, 默认 3): 2
分区类型或别名(输入 L 列出所有类型):19
已将分区“Linux filesystem”的类型更改为“Linux swap”。
命令(输入 m 获取帮助):w
分区表已调整。将调用 ioctl() 来重新读分区表。正在同步磁盘。
注:
n: 新建分区
+16G: 新建分区的大小为 16G
t:修改分区类型,默认都为
L:查看所有的分区类型,找到你需要的
操作完成后可自行查看结果 fdsik -l
。
3. 分区格式化
每种不同类型的分区需要不同操作:
# 格式化 boot
mkfs.fat -F32 /dev/nvme1n1p1
# 格式化 swap
mkswap /dev/nvme1n1p2
# 格式化 根分区
mkfs.ext4 /dev/nvme1n1p3
系统文件迁移
# 挂载根分区
mount /dev/nvme1n1p3 /mnt
# 同步数据,此处未同步 boot
rsync -aAXv /* /mnt --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found","/boot" }
由于经常搞崩电脑,还是练习下拆开步骤的形式。
重建 boot
移除旧磁盘,再进入准备好的 Arch Live
环境。
1. 挂载分区并生成 fstab
# 查看分区信息
fdisk -l
# 挂载根节点
mount /dev/nvme0n1p3 /mnt
# 挂载 boot
mount /dev/nvme0n1p1 /mnt/boot
# 生成 fstab
genfstab -L /mnt > /mnt/etc/fstab
若后续启用 swap,则再执行 genfstab
即可。
2. 安装依赖
进入系统并安装依赖:
arch-chroot /mnt
pacman -S linux mkinitcpio efibootmgr
# 有需要也可重装 grub
pacman -S grub
3. 生成 grub
# 执行 grub-install
grub-install --efi-directory=/boot
# 生成 grub.cfg(若报错,可增加 LANG=C)
grub-mkconfig -o /boot/grub/grub.cfg
# LANG=C grub-mkconfig -o /boot/grub/grub.cfg
其他方式
未曾尝试
# disk
dd if=/dev/sdx of=/dev/sdy conv=noerror,sync
# image
dd if=/dev/sdx of=/run/media/shanyuhai/xxx/sys.img
dd if=sys.img of=/dev/sdy