如何通过命令行挂载非LUKS加密的Linux SSD磁盘以复制其中数据
问题描述
Today when I turned on my laptop the OS couldn't start. After the BIOS loaded it was stuck in an infinite loop. The system couldn't boot SSD disk.
So I installed temporary OS Ubuntu 22.04 on another drive to mount my bootable encrypted SSD disk.
This is not LUKS encryption. The temporary OS recognizes the SSD disk. On the left side there are bpool and rpool icons. But I can`t see the contents.
How can I mount encrypted SSD disk with command line so I can copy the data?
(附:用户提供了三张磁盘管理器截图,显示系统已识别到bpool和rpool,但无法查看磁盘内的内容)
嘿,我来帮你搞定这个问题!从你提到的bpool和rpool来看,这应该是ZFS加密的磁盘(这俩是ZFS生态里常用的池命名),既然不是LUKS,那咱们就从ZFS的操作逻辑来一步步弄:
第一步:先安装ZFS工具包
你的临时Ubuntu系统可能默认没装ZFS相关工具,先补上:
sudo apt update && sudo apt install zfsutils-linux
第二步:确认目标ZFS池的状态
安装完成后,先列出所有识别到的ZFS池,确认bpool和rpool都在列表里:
sudo zpool list
执行后你应该能看到这两个池的信息,比如容量、使用率这些。
第三步:解锁加密的ZFS池
因为磁盘是加密的,必须先解锁才能访问内容。运行下面的命令,系统会提示你输入加密密码:
sudo zfs load-key -a
输入你当初设置的加密密码,成功后池就解锁了。
第四步:挂载ZFS池(如果没自动挂载的话)
解锁后ZFS通常会自动挂载,但如果没动静,咱们手动来:
- 先查看所有ZFS数据集的详细信息,找到你要访问的内容所在的数据集(比如存放用户数据的
home相关条目):
看sudo zfs listMOUNTPOINT列,就能知道每个数据集的挂载路径。 - 手动挂载主数据池(一般是
rpool下的系统数据集):
这里的sudo zfs mount rpool/ROOT/[你的系统名称][你的系统名称]需要替换成你看到的实际名称,比如可能是ubuntu之类的,从zfs list的输出里找就行。 - 如果需要挂载引导相关的
bpool,命令类似:sudo zfs mount bpool/BOOT/[你的系统名称]
第五步:复制数据
挂载成功后,你就可以在对应的挂载路径找到你的数据了!比如如果rpool的用户数据挂载在/mnt/rpool/home/你的用户名,那就用rsync或者cp命令把数据复制到外部存储:
# 用rsync更稳妥,支持断点续传还能保留文件权限 sudo rsync -av /mnt/rpool/home/你的用户名/ /media/你的外部存储磁盘/备份文件夹/
一些小提示
- 如果解锁时提示找不到密钥,有可能是当初加密时用了密钥文件而不是密码,但临时系统没访问到那个文件。这时候可以试试指定密钥文件路径(如果记得的话):
sudo zfs load-key rpool -f /path/to/你的密钥文件,不过大概率直接输密码就能解决。 - 所有操作记得加
sudo,ZFS池的管理需要管理员权限。
备注:内容来源于stack exchange,提问作者luknij

