LUKS 上的非 root LVM

LUKS 上的非 root LVM

SSHD 似乎停留在 4TB 和 8GB SSD 缓存(型号有 1TB/32GB 可选),而更大的 SSD 则随处可见,并且存在一些解决方案,可以在 Linux 中将 HDD 与 SSD 配对。我正在寻找一种在设置后易于在桌面上使用的解决方案。理想情况下,只需单击一个或两个启动器图标,输入加密存储的密码并在 Nautilus 中安装驱动器,而无需记住任何特定命令。

  • 所有存储和缓存数据都必须加密存储。
  • 可以使用单独的大容量硬盘来将数据迁移到新的分区方案或根据需要进行迁移。

我目前阅读的相关文章:

答案1

LUKS 上的非 root LVM

介绍

信息:

  • 我刚刚因为这个特性开始使用 LVM,我的目的是使用带有 SSD 的加密数据分区进行缓存。
  • 我通常在 Linux 上使用 ZFS(另请参阅) 用于数据存档和冗余,这似乎更易于管理和设置。如果您想使用多个 HDD,您可能需要查看 ZFS,但是 LVM 比 Linux 上的 ZFS 有一个优势,那就是它不依赖于 DKMS 构建的内核模块,如果您需要使用内核 PPA 中的主线内核,该模块可能无法正确构建和运行。(可能是我在 ZFS 方面做错了什么,但 Phoronix 上的一些文章读起来好像就是这样。)
  • 这是为了用于工作站而制定的,并且优先使用 GUI 方式的解决方案,以便能够展示当前可以使用 GUI 实现的功能。

警告:

  • 不要只是将任何 SSD 作为 HDD 的缓存添加进去,就指望性能会大幅提升。我目前使用的 480GB BX200 看起来还不错,但在基准测试和产品评论中,写入速度比 HDD 慢。还要注意,当不处于写回缓存模式时,两个设备必须默认同时写入数据——这会增加数据损坏的风险——所以不要被 indicator-multiload 等工具中双倍的总传输速率和缓慢的写入速度所困扰。

概述:

为了提供更多见解,以下是我在阅读问题中的文章后在虚拟机中设置的内容,然后才在实际硬件上尝试。luks-使用 GUI 解锁加密设备时会自动创建命名设备,LVM 将检测到设备已可用,并会像往常一样提示您在 nautilus 中挂载文件系统。

lwbt@vxenial:~$ lsblk
sdb                                           8:16   0    8G  0 disk
└─luks-6bc875f1-de30-4698-ba74-eea2c5d5bb87 252:0    0    8G  0 crypt 
  └─vg0-datalv_corig                        252:5    0  7,9G  0 lvm
    └─vg0-datalv                            252:1    0  7,9G  0 lvm
sdc                                           8:32   0    8G  0 disk
└─luks-e20dd038-9886-4895-b786-855ba4c31c7e 252:2    0    8G  0 crypt 
  ├─vg0-cache_cdata                         252:3    0    8G  0 lvm 
  │ └─vg0-datalv                            252:1    0  7,9G  0 lvm 
  └─vg0-cache_cmeta                         252:4    0   12M  0 lvm 
    └─vg0-datalv                            252:1    0  7,9G  0 lvm 


lwbt@vxenial:~$ ll /dev/mapper/
total 0
drwxr-xr-x  2 root root     180 Sep  6 02:54 ./
drwxr-xr-x 20 root root    4420 Sep  6 02:54 ../
crw-------  1 root root 10, 236 Sep  6 00:37 control
lrwxrwxrwx  1 root root       7 Sep  6 02:54 luks-6bc875f1-de30-4698-ba74-eea2c5d5bb87 -> ../dm-0
lrwxrwxrwx  1 root root       7 Sep  6 02:54 luks-e20dd038-9886-4895-b786-855ba4c31c7e -> ../dm-2
lrwxrwxrwx  1 root root       7 Sep  6 02:54 vg0-cache_cdata -> ../dm-3
lrwxrwxrwx  1 root root       7 Sep  6 02:54 vg0-cache_cmeta -> ../dm-4
lrwxrwxrwx  1 root root       7 Sep  6 02:54 vg0-datalv -> ../dm-1
lrwxrwxrwx  1 root root       7 Sep  6 02:54 vg0-datalv_corig -> ../dm-5

如果您对块设备 (SSD/HDD) 进行分区而不是直接使用 LUKS 加密,则 lsblk 的输出可能会有额外的一层。当然,如果您对 LUKS 加密不感兴趣,您可以跳过以下说明中的这些步骤,这也是可以的。

指示

安装所需的软件包:

sudo apt install lvm2 thin-provisioning-tools cryptsetup

以下部分中的命令将销毁所有现有数据在驱动器上。

加密每个单个设备:

sudo cryptsetup luksFormat ${device_name}
sudo cryptsetup luksOpen ${device_name} ${mapper_name_hdd_or_ssd}

注意:gnome-disks 具有加密和挂载加密设备的选项,但它也会创建 EXT4 文件系统,必须将其删除才能继续按照说明操作。

然后将设备作为物理卷添加到 LVM ,vg0datalv硬盘稍后将被格式化以保存所有数据:

pvcreate /dev/mapper/${mapper_name_hdd}
vgcreate vg0 /dev/mapper/${mapper_name_hdd}
lvcreate -l 100%pvs -n datalv vg0 /dev/mapper/${mapper_name_hdd}

注意:100%pvs将创建一个跨您选择的整个设备(例如加密容器或分区)的卷。更多详细信息和选项可在lvm缓存以及其他相关的手册页。

现在通过添加固态硬盘到卷组:

pvcreate /dev/mapper/${mapper_name_ssd}
vgextend vg0 /dev/mapper/${mapper_name_ssd}

cachevg0SSD 上创建一个名为的缓存池卷,然后将新的缓存池作为缓存添加到datalv

lvcreate --type cache-pool -l 100%pvs -n cache vg0 /dev/mapper/${mapper_name_ssd}
lvconvert --type cache --cachepool vg0/cache vg0/datalv

注意:lvcreate 将通过这种方式自动为您选择 cache_cdata 和 cache_cmeta 的最佳大小。

在对 LVM 配置进行更改后,如果您想避免重新启动,可能需要重新扫描 pv、vg 和 lv 以激活 LVM 设备:

pvscan
vgscan
lvscan
vgchange -ay

当未提供名称时,以下命令将停用所有 LVM 卷:

vgchange -an 

最后是时候格式化逻辑卷并传输数据了。

  1. 使用 Gparted GUI 进行格式化的示例

    pkexec gparted /dev/mapper/vg0-datalv
    
  2. 使用命令行工具格式化的示例:

    sudo mkfs.ext4 /dev/mapper/vg0-datalv
    

现在新的文件系统应该出现在 Nautilus 中。

用法

众多 LVM 命令使得设置看起来相当复杂,而对于经验丰富的用户来说,它甚至可能没有充分利用 LVM 的潜力,但一旦设置完成并重新启动计算机,您只需从 Unity 启动器或 gnome-disks 中安装加密磁盘,然后像任何其他文件系统或磁盘一样安装 Nautilus 中显示的卷。无需记住复杂的命令。据我所知,目前没有可用于处理 Ubuntu 中缓存池的 LVM 设置的 GUI 工具。

笔记:

  • 我更喜欢在安装 HDD 之前安装较小的加密缓存 SSD 设备
  • 可以删除和替换缓存,请参阅删除缓存在 lvmcache 手册页中。
  • 要显示有关缓存的所有指标,您可以使用以下命令:

    sudo lvs -o+cache_total_blocks,cache_used_blocks,cache_dirty_blocks,cache_read_hits,cache_read_misses,cache_write_hits,cache_write_misses,cachemode,cache_policy,cache_settings
    

相关内容