如何不重装Manjaro且无数据丢失加密根文件系统?含Live CD方案咨询
没问题,这个操作完全可行——通过Manjaro Live CD把现有未加密的根分区克隆到加密分区,然后重新配置引导让系统从加密分区启动,全程不用重装系统,也不会丢失任何数据。下面是一步步的详细操作,跟着来就行:
前提准备
- 下载和你现有Manjaro系统同架构的Live ISO(比如x86_64版本),制作成可启动U盘/光盘
- 准备一个容量≥80GB的空闲磁盘分区(可以是新磁盘,也可以是现有磁盘上的空闲空间;如果要覆盖原分区,得确保先克隆完再处理)
- 提前备份一下最关键的个人数据(虽然操作本身不会丢数据,但以防意外总是好的)
步骤1:从Live CD启动并挂载现有根分区
- 插入Live U盘,重启电脑并从U盘引导,进入Manjaro的Live环境
- 打开终端,先确认现有分区信息:
你应该能看到lsblk/dev/sda1(根分区)和/dev/sda2(交换分区) - 创建临时挂载点,挂载未加密的根分区:
sudo mkdir /mnt/original_root sudo mount /dev/sda1 /mnt/original_root
步骤2:创建加密分区
假设你要使用的新分区是/dev/sdb1(根据你的实际磁盘调整,比如如果是在原磁盘上腾出来的空间,可能是/dev/sda3)
- 用
cryptsetup创建LUKS加密容器:
执行后会提示你设置加密密码,一定要记住这个密码!sudo cryptsetup luksFormat /dev/sdb1 - 打开加密容器,映射为
cryptroot:sudo cryptsetup open /dev/sdb1 cryptroot - 在加密容器里创建文件系统(和原根分区一致,比如原是ext4就用ext4):
sudo mkfs.ext4 /dev/mapper/cryptroot
步骤3:克隆未加密根分区到加密分区
这里用rsync比dd更安全,因为它可以跳过空文件,还能中断后续传:
- 创建加密分区的挂载点:
sudo mkdir /mnt/crypted_root sudo mount /dev/mapper/cryptroot /mnt/crypted_root - 同步原根分区的所有数据到加密分区:
这个命令会完整复制系统和个人数据,排除掉不需要的临时目录sudo rsync -aAXv /mnt/original_root/ /mnt/crypted_root/ --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"}
步骤4:配置加密分区的启动支持
现在需要进入加密分区的系统环境,修改配置文件让系统能识别加密根:
- 挂载必要的系统虚拟文件系统:
sudo mount --bind /dev /mnt/crypted_root/dev sudo mount --bind /proc /mnt/crypted_root/proc sudo mount --bind /sys /mnt/crypted_root/sys sudo mount --bind /run /mnt/crypted_root/run - 切换到加密分区的chroot环境:
sudo chroot /mnt/crypted_root - 修改
/etc/fstab,把原根分区的UUID换成加密容器映射后的UUID:- 先查看加密容器的UUID:
blkid /dev/mapper/cryptroot - 编辑
fstab:
找到原根分区的行(挂载点nano /etc/fstab/),把UUID=xxx替换成刚才查到的cryptroot的UUID,保存退出
- 先查看加密容器的UUID:
- 修改
/etc/mkinitcpio.conf,添加加密支持:- 编辑文件:
nano /etc/mkinitcpio.conf- 在
HOOKS行里,把block后面添加encrypt,比如原来的HOOKS=(base udev autodetect modconf block filesystems keyboard fsck)改成:HOOKS=(base udev autodetect modconf block encrypt filesystems keyboard fsck)
- 在
- 重新生成initramfs:
mkinitcpio -P
- 编辑文件:
- 修改GRUB配置,添加加密参数:
- 编辑
/etc/default/grub:nano /etc/default/grub- 修改
GRUB_CMDLINE_LINUX_DEFAULT,添加cryptdevice=/dev/sdb1:cryptroot root=/dev/mapper/cryptroot(注意替换/dev/sdb1为你的加密分区实际路径),比如:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash cryptdevice=/dev/sdb1:cryptroot root=/dev/mapper/cryptroot"
- 修改
- 更新GRUB:
grub-mkconfig -o /boot/grub/grub.cfg
- 编辑
- 退出chroot环境:
exit
步骤5:处理交换分区加密
原交换分区/dev/sda2可以改成加密交换,更安全:
- 关闭原交换分区:
sudo swapoff /dev/sda2 - 加密交换分区:
设置密码(可以和根分区一样,也可以不同)sudo cryptsetup luksFormat /dev/sda2 - 打开加密交换:
sudo cryptsetup open /dev/sda2 cryptswap - 创建交换文件系统:
sudo mkswap /dev/mapper/cryptswap - 挂载交换分区:
sudo swapon /dev/mapper/cryptswap - 回到chroot环境,修改
fstab添加加密交换:sudo chroot /mnt/crypted_root- 查看加密交换的UUID:
blkid /dev/mapper/cryptswap - 编辑
fstab,替换原交换分区的行:
添加或修改成:nano /etc/fstabUUID=xxx /dev/mapper/cryptswap swap defaults 0 0 - 另外,为了每次启动自动打开加密交换,需要修改
/etc/crypttab:
添加一行:nano /etc/crypttabcryptswap /dev/sda2 none luks - 退出chroot:
exit
- 查看加密交换的UUID:
步骤6:更新引导并验证启动
- 安装GRUB到新的加密分区所在的磁盘(比如如果加密分区在
/dev/sdb,就执行):
如果你是BIOS引导,就用:sudo grub-install --target=x86_64-efi --efi-directory=/mnt/crypted_root/boot/efi --bootloader-id=Manjaro --recheck /dev/sdb
注意替换sudo grub-install --recheck /dev/sdb/dev/sdb为你的加密分区所在的磁盘(不是分区) - 卸载所有挂载的分区:
sudo umount /mnt/crypted_root/{dev,proc,sys,run} sudo umount /mnt/crypted_root sudo umount /mnt/original_root sudo cryptsetup close cryptroot sudo cryptsetup close cryptswap - 重启电脑,拔出Live U盘,此时应该会提示你输入加密密码,输入后就能进入加密的Manjaro系统了
收尾工作
- 启动后可以验证一下根分区和交换分区是否正常:
df -h / swapon --show - 如果一切正常,你可以选择格式化原来的
/dev/sda1作为存储分区,或者删除它腾出空间
内容的提问来源于stack exchange,提问作者Vipin
相关产品推荐
相关产品推荐

