我在系统安装过程中手动编写了一个分区表,其中包含加密部分、/boot
分区和未分区的其余部分。尽管我首先创建了分区(每个分区都手动创建)并将它们放入一个逻辑卷中。逻辑卷important
被卷组填满a
(如果不能这样,请更正;如果知道必须这样,请删除此注释)。之后,我用加密了逻辑卷LUKS
并安装了系统。
分区表
$ LC_ALL=C sudo lsblk
[sudo] password for sj126:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 931.5G 0 disk
|-sda1 8:1 0 953M 0 part /boot
|-sda2 8:2 0 1K 0 part
|-sda3 8:3 0 16G 0 part [SWAP]
|-sda4 8:4 0 100G 0 part
|-sda5 8:5 0 7.5G 0 part
| `-experiment-test 254:0 0 418.3G 0 lvm
| `-experiment-test_crypt 254:1 0 418.3G 0 crypt /
|-sda6 8:6 0 14G 0 part
| `-experiment-test 254:0 0 418.3G 0 lvm
| `-experiment-test_crypt 254:1 0 418.3G 0 crypt /
|-sda7 8:7 0 372.5G 0 part
| `-experiment-test 254:0 0 418.3G 0 lvm
| `-experiment-test_crypt 254:1 0 418.3G 0 crypt /
|-sda8 8:8 0 7G 0 part
| `-experiment-test 254:0 0 418.3G 0 lvm
| `-experiment-test_crypt 254:1 0 418.3G 0 crypt /
|-sda9 8:9 0 7G 0 part
| `-experiment-test 254:0 0 418.3G 0 lvm
| `-experiment-test_crypt 254:1 0 418.3G 0 crypt /
|-sda10 8:10 0 7G 0 part
| `-experiment-test 254:0 0 418.3G 0 lvm
| `-experiment-test_crypt 254:1 0 418.3G 0 crypt /
|-sda11 8:11 0 2.3G 0 part
| `-experiment-test 254:0 0 418.3G 0 lvm
| `-experiment-test_crypt 254:1 0 418.3G 0 crypt /
`-sda12 8:12 0 1.1G 0 part
`-experiment-test 254:0 0 418.3G 0 lvm
`-experiment-test_crypt 254:1 0 418.3G 0 crypt /
$ LC_ALL=C sudo partitionmanager
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
Loaded backend plugin: "pmlibpartedbackendplugin"
"Using backend plugin: pmlibpartedbackendplugin (1)"
"Scanning devices..."
"Device found: [...]"
blkid: unknown file system type "" on "/dev/sda2"
"Partition ‘/dev/sda2’ is not properly aligned (first sector: 1955838, modulo: 2046)."
"Scan finished."
关键是,当浏览我的目录时,只有/boot
on/dev/sda2
显示为(单独的)分区,剩余部分似乎/
位于同一分区上。
dev/sda{5,..12}
应该成为包含 的分区/home
,例如,留在同一逻辑卷中并且也应该安装在那里。
编辑:以下是我的分区表(已更新)。分区 3 和 4 是解决方法的开始,现在可以忽略。唯一遗漏的是磁盘标签和磁盘标识符。
$ LC_ALL=C sudo fdisk -l /dev/sda
Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: [...]
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: [...]
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 1953791 1951744 953M 83 Linux
/dev/sda2 1955838 879298559 877342722 418.4G 5 Extended
/dev/sda3 879300608 912855039 33554432 16G 82 Linux swap / Solaris
/dev/sda4 * 912857088 1122572287 209715200 100G 83 Linux
/dev/sda5 1955840 17577983 15622144 7.5G 8e Linux LVM
/dev/sda6 17580032 46874623 29294592 14G 8e Linux LVM
/dev/sda7 46876672 828125183 781248512 372.5G 8e Linux LVM
/dev/sda8 828127232 842774527 14647296 7G 8e Linux LVM
/dev/sda9 842776576 857423871 14647296 7G 8e Linux LVM
/dev/sda10 857425920 872073215 14647296 7G 8e Linux LVM
/dev/sda11 872075264 876955647 4880384 2.3G 8e Linux LVM
/dev/sda12 876957696 879298559 2340864 1.1G 8e Linux LVM
Partition 2 does not start on physical sector boundary.
Partition table entries are not in disk order.
$ LC_ALL=C sudo lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
test experiment -wi-ao---- <418.32g
$ LC_ALL=C sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sda10 experiment lvm2 a-- 6.98g 0
/dev/sda11 experiment lvm2 a-- 2.32g 0
/dev/sda12 experiment lvm2 a-- 1.11g 0
/dev/sda5 experiment lvm2 a-- <7.45g 0
/dev/sda6 experiment lvm2 a-- 13.96g 0
/dev/sda7 experiment lvm2 a-- <372.53g 0
/dev/sda8 experiment lvm2 a-- 6.98g 0
/dev/sda9 experiment lvm2 a-- 6.98g 0
答案1
您的磁盘使用 MBR 分区表进行分区。磁盘分区如下:
sda1
:主分区,使用文件系统格式化,安装在/boot
.sda2
:扩展分区,包含以下逻辑分区:sda5
tosda12
:逻辑分区,格式化为LVM物理磁盘。
sda3
:主分区。不能说是否格式化。sda4
:主分区。不能说是否格式化。
LVM 物理磁盘sda5
是sda12
LVM 卷组的成员experiment
。
LVM 卷组experiment
包含一个名为 的 LVM 逻辑卷test
。 LVM 逻辑卷experiment-test
被格式化为 LUKS 容器。 LUKS容器的有效负载被命名为experiment-test_crypt
;它使用文件系统进行格式化并安装在/
.
注意:
sda2
是一个扩展分区。它只是逻辑分区的容器,无法使用文件系统进行格式化和挂载。逻辑分区
sda5
全部sda12
格式化为 LVM 物理磁盘并成为 LVM 卷组的成员experiment
。 LVM卷组实验中的所有空间都分配给逻辑卷test
,格式为LUKS。
答案2
LVM 的目的是将物理存储单元(整个磁盘或分区)的大小与逻辑卷(通常包含文件系统)的大小分离。
因此,将单个磁盘拆分为多个分区,然后将所有这些分区作为 LVM 物理卷 (PV) 添加到同一卷组 (VG) 中并不是很有用,除非作为打字练习。您最终基本上会回到开始的地方 - 对于一大块无差别的存储,您需要将其分割成有用的块。
每个 PV 一次只能是一个 VG 的成员。由于您的所有 PV 都是experiment
VG 的成员,因此您在问题中提到的 VG显然不再存在,这意味着本应位于其中的a
逻辑卷 (LV)现在已消失并被覆盖。important
对不起。
坦率地说,您对 LVM 设置的描述对我来说似乎是……倒退或者可能是从内到外的。希望下面的解释可以帮助您理清概念。
为了在新磁盘上最大限度地发挥 LVM 的优势,您通常需要执行以下两项操作之一:
如果是系统磁盘,则创建满足系统固件要求所需的任何内容(例如 UEFI 系统上的 EFI 系统分区,或
/boot
非常旧的 BIOS 系统,其固件可能无法处理磁盘的完整大小)和单个大分区覆盖磁盘的其余部分,用作 LVM PV。即使固件没有设置任何特定限制(例如,使用具有 LVM 和加密支持的最新版本 GRUB 进行 BIOS 式引导),您可能需要创建一个非 LVM/boot
分区,以确保引导加载程序组件模块以及内核和 initramfs 文件对于启动至关重要的内容肯定包含在特定的“启动磁盘”上,而不是大型多磁盘 LVM 卷组上的“任何地方”,以便更轻松地进行故障排除。如果是数据磁盘,您可以选择根本不使用分区,而只是将整个磁盘用作 LVM PV。如果磁盘实际上是 SAN LUN,这可能是一个优势:如果需要扩展 LUN,则可以即时扩展整个磁盘 LVM PV。 SAN管理员增加LUN大小后,只需要几个命令就可以立即使用扩展的大小,而无需先摆弄分区表。另一方面,对于其他操作系统,全磁盘 LVM PV 无法识别为包含有效数据的磁盘:如果使用其他操作系统访问,这样的磁盘可能很容易被意外重新格式化。为了最大限度地降低这种风险,您可以创建一个包含整个磁盘的分区,并将其用作 LVM PV。
拥有多个 PV 本身并不是什么大问题,但您应该至少有一些特定原因让每个物理磁盘拥有多个 PV。回收以前的双引导操作系统安装所使用的空间就是这样一个有效的原因。另一方面,拥有多个 VG(一个就足够了)可能会很痛苦。
一旦您拥有一个或多个 PV,您就可以创建一个或多个 VG。如果您只有一张磁盘,通常没有理由创建多个 VG。如果您有多个物理磁盘,则需要确定是否需要出于任何原因将这些磁盘彼此分开,或者您是否可以假设它们在存储数据的整个生命周期内将保留在一起。如果磁盘可以放在一起,您可以将它们的所有 PV 添加到单个 VG 中。这将为您提供一大存储池,您可以将其分割成 LV任何你想要的方式- 只要 VG 有足够的可用总空间,您就可以创建一个 LV超越任何单一PV的限制。
当使用 LVM 时,LV 主要代替传统分区作为文件系统的容器。如果您需要扩展 LV,您就可以做到这一点 - 即使是在线 - 只要您的 VG 的至少一个 PV 中仍然有未分配的空间。如果您用完了未分配的空间,您可以添加(是的,甚至是热添加)一个新的 PV 到 VG 中,然后然后将您的 LV 扩展到它上面。
在 VG 的范围内,pvmove
如有必要,您可以使用该命令来移动 LV - 即使 VG 处于活动状态并且 LV 上的文件系统已挂载并正在使用时也是如此。您可以将数据迁移到更大的新物理磁盘上,方法是将新磁盘作为 PV 添加到旧 VG 中,然后使用将pvmove
数据从旧磁盘移动到新磁盘,然后删除旧磁盘一旦磁盘空了,就从 VG 中删除磁盘。所有这一切都可以在不卸载任何东西的情况下完成。
如果您预计需要将某个特定磁盘移动到另一个包含数据的系统,那么您可以为该磁盘创建一个单独的卷组,或者如果另一个系统不是另一个 Linux,则可能根本不在该磁盘上使用 LVM系统。这可能是在使用 LVM 的普通 Linux 设置中创建多个 VG 的唯一真正原因。
有两种方法可以与 LVM 一起设置加密:
- 您可以在将物理磁盘/分区设置为 LVM PV 之前对其进行加密,这样单个加密密码即可一次性解锁所有 LV(分层:磁盘 -> 分区 -> 加密设备 -> PV -> LV)
- 或者您可以先设置 PV、VG 和 LV,然后分别在一个或多个 LV 上设置加密,允许不同的 LV 在需要时具有不同的加密密码。 (分层:磁盘->分区->PV->LV->加密设备)