Skip to content

Commit 73c4a02

Browse files
committed
trueblog: add archlinuxMigration
1 parent ecb946d commit 73c4a02

File tree

2 files changed

+120
-0
lines changed

2 files changed

+120
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
---
2+
title: 在硬盘之间迁移 Arch Linux
3+
date: 2025/03/05 11:46:00
4+
updated: 2025/03/11 19:26:00
5+
excerpt: 为了腾出一块硬盘用来装在香橙派上,也为了获得更好的数据安全性,我购买了一块致态,并迁移了我的系统。虽然当时我的确是看的wiki安装的系统,但是过了一年半载后,我发现自己已经忘得差不多了。在重读wiki,迁移了系统后,我又发现grub有些“不安全”,却不曾想为了让grub“安全”有些麻烦...在帮同学装ArchLinux的时候,又遇到了新的麻烦...
6+
tags:
7+
- non-ctf
8+
- grub
9+
thumbnail: /assets/trueblog/archMigration.jpg
10+
---
11+
12+
## From top to buttom
13+
14+
原来安装Arch Linux的是一块“金士顿大号u盘”nv2,由于最近未来打算买个香橙派5 plus,
15+
正好把这个“大号u盘”升个级,整了块致态7100。硬盘准备好了,接下来就是迁移系统。
16+
17+
并不像windows那样直接用diskgenius就可以迁移,在linux上需要一些额外的操作。
18+
根据[wiki上写的迁移指南](https://wiki.archlinuxcn.org/wiki/%E8%BF%81%E7%A7%BB%E5%88%B0%E6%96%B0%E7%A1%AC%E4%BB%B6#%E8%87%AA%E4%B8%8A%E8%80%8C%E4%B8%8B)
19+
在安装好两块盘后,启动archiso。然后给新硬盘分区,使用`cgdisk`
20+
分出efi、swap和根后,初始化文件系统并挂载到`/mnt/new`下,在挂载旧硬盘到
21+
`/mnt/old`下。正好回去看了一下安装指南,太久不看都忘了差不多了。
22+
23+
{% note blue fa-hard-drive %}
24+
分区时,现代硬盘请选择GPT。固态硬盘还可以设置逻辑块大小,在一些硬盘中,4KB
25+
性能更佳,[详见wiki](https://wiki.archlinuxcn.org/wiki/%E5%85%88%E8%BF%9B%E6%A0%BC%E5%BC%8F%E5%8C%96#NVMe_%E5%9B%BA%E6%80%81%E7%A1%AC%E7%9B%98)
26+
注意更改逻辑块大小会格式化硬盘!虽然我的7100没4KB这个选项就是了。
27+
{% endnote %}
28+
29+
挂载好后迁移文件,使用rsync,并输出简洁的进度:
30+
31+
```sh
32+
rsync --info=progress2 -qaHAXS $SOURCE_DIR $DESTINATION_DIR
33+
```
34+
35+
等待20分钟后,所有文件都迁移完毕了。下一步我先`umount`所有分区,
36+
然后在`mount`新盘到`/mnt`(也许不需要umount?),在检查了`genfstab`无误后,
37+
就可以更新fstab并`arch-chroot`去更新grub。由于是全新盘,因此还要先install
38+
一下grub。最后`mkinitcpio -P`后就可以重启使用了。
39+
40+
{% note green fa-lightbulb %}
41+
请挂载所有分区,否则在genfstab时可能缺少一些分区挂载信息。
42+
{% endnote %}
43+
44+
## 补上安全措施
45+
46+
由于我是使用grub启动的,因此在默认情况下,可以任意修改配置。这将意味着,
47+
只要有恶意的使用者能接触到你的电脑,可以直接在内核启动参数后添加
48+
`init=/bin/bash`来绕过密码认证,这是非常不安全的。为了避免这种情况发生,
49+
grub内置了密码方案,可以设置如果要启动grub shell或者编辑启动配置,
50+
需要认证用户和密码。具体可以参考这个
51+
[Ask Ubuntu的问答](https://askubuntu.com/questions/656206/how-to-password-protect-grub-menu)
52+
53+
但是,配置完以后,默认启动任何配置都需要密码,而想要和原来一样,不需要密码就可以启动,
54+
只是在编辑配置时需要密码,可以参照这篇
55+
[Arch wiki的讨论](https://wiki.archlinux.org/title/Talk:GRUB/Tips_and_tricks#c-Beckab-2019-08-12T14:54:00.000Z-Password_protection_of_non_local_system_boot_options)
56+
设置所有启动项在启动时无需密码。
57+
58+
为了防止有人插u盘来实现硬盘直接读写,在加上一个bios锁就基本万无一失了。
59+
虽然说仍然可以通过拆机,拔盘的方式读数据,但至少获得数据的难度大了很多了。
60+
全盘加密就算了,有点性能损失不说,windows、linux双平台的兼容性才是真正的地狱。
61+
62+
**然而,grub的实现似乎有点不合理...**
63+
64+
当submenu是unrestricted时,submenu可以随意进入,并且其中的menuentry,
65+
尽管像其他的menuentry一样是unrestricted,仍然可以任意修改或打开grub
66+
命令行。太不安全了!
67+
68+
为此,我决定用在`10_linux`规则中将submenu指定为restricted,补上这个漏洞。
69+
(或者将submenu展开也行,但是看着有点冗余了)为了避免系统更新的时候将其覆盖,
70+
我还写了一个pacman hook来在更新系统的时候自动加上我的限制。
71+
72+
```sh 04_make_OS_entries_unrestricted
73+
#!/bin/sh
74+
exec tail -n +3 $0
75+
# This file provides an easy way to add custom menu entries. Simply type the
76+
# menu entries you want to add after this comment. Be careful not to change
77+
# the 'exec tail' line above.
78+
79+
submenu_id_option="$menuentry_id_option"
80+
menuentry_id_option="--unrestricted $menuentry_id_option"
81+
```
82+
83+
```ini grub.hook
84+
[Trigger]
85+
Operation = Install
86+
Operation = Upgrade
87+
Type = Package
88+
Target = grub
89+
[Action]
90+
Description = Re-restricting GRUB's submenus...
91+
Depends = sed
92+
When = PostTransaction
93+
Exec = /usr/bin/sed -i "s/menuentry_id_option 'gnulinux-advanced/submenu_id_option 'gnulinux-advanced/g" /etc/grub.d/10_linux
94+
```
95+
96+
这样大概就真的把漏洞补上了吧...
97+
98+
## Build from 0
99+
100+
之后还帮同学安装了Arch Linux,也是和我一样的双硬盘双系统方案。
101+
尽管仔细阅读了安装指南,但是感觉官方文档仍然只适合有一定linux基础的用户参考,
102+
从0开始安装,不使用`archinstall`的情况下,有一些必要的操作,比如
103+
`systemctl enable NetworkManager`这样的操作写得并不清晰,
104+
没有直接一条指令来警示用户,有不少操作是系统没有按预期运行,我才回到
105+
archiso中补做的。~~我都不知道我自己装的时候是怎么一遍过的,我都忘记用
106+
`systemctl enable sddm`开启桌面环境自启了~~
107+
108+
{% note yellow fa-bug %}
109+
不要尝试在x11 + nvidia + kde的情况下,选择只在外接显示器上显示...
110+
设置了之后无响应,只有鼠标能动,画面没反应...如果设置了的话,
111+
需要在tty里,删除`~/.local/share/kscreen`下对应的配置文件,
112+
然后重启才行! ~~我们KDE用户也有自己的赛博灯泡~~
113+
{% endnote %}
114+
115+
## 参考
116+
117+
1. [先进格式化 - NVMe固态硬盘 - Arch Linux中文维基](https://wiki.archlinuxcn.org/wiki/%E5%85%88%E8%BF%9B%E6%A0%BC%E5%BC%8F%E5%8C%96#NVMe_%E5%9B%BA%E6%80%81%E7%A1%AC%E7%9B%98)
118+
2. [迁移到新硬件 - 自上而下 - Arch Linux中文维基](https://wiki.archlinuxcn.org/wiki/%E8%BF%81%E7%A7%BB%E5%88%B0%E6%96%B0%E7%A1%AC%E4%BB%B6#%E8%87%AA%E4%B8%8A%E8%80%8C%E4%B8%8B)
119+
3. [How to password protect Grub menu - Ask Ubuntu](https://askubuntu.com/questions/656206/how-to-password-protect-grub-menu)
120+
4. [Talk:GRUB/Tips_and_tricks - Password protection of non local system boot options - ArchWiki](https://wiki.archlinux.org/title/Talk:GRUB/Tips_and_tricks#c-Beckab-2019-08-12T14:54:00.000Z-Password_protection_of_non_local_system_boot_options)
631 KB
Loading

0 commit comments

Comments
 (0)