在 LVM 上安装 Arch Linux
你应该在分区和格式化步骤之间创建 LVM 卷,具体参考安装指南。文件系统将创建在逻辑卷 (LV) 内部,而不是直接格式化一个分区作为根文件系统。
快速概览
- 安装所需的软件包。(参考 LVM#Installation)
- 创建用于存放物理卷 (PV) 的分区。
- 创建物理卷 (PV)。如果你只有一个磁盘,最好是在一个大分区中创建单个 PV。如果你有多个磁盘,可以在每个磁盘上创建分区,并在每个分区上创建 PV。
- 创建卷组 (VG) 并将所有 PV 添加到其中。
- 在该 VG 内部创建逻辑卷 (LV)。
- 继续执行 安装指南#格式化分区。
- 当你进行到安装指南中的 安装指南#Initramfs 部分时,将
lvm2钩子添加到/etc/mkinitcpio.conf中(详情见下文)。
安装
你可以一直按照安装指南操作,直到到达 安装指南#分区磁盘。此时你将偏离指南,以 LVM 为目标进行所有分区操作。
创建分区
首先,在配置 LVM 之前,根据需要对磁盘进行分区。
创建分区
- 如果你使用 GUID 分区表 (GPT),请将分区类型 GUID 设置为
E6D6D379-F507-44C2-A23C-238F2A3DF928(在 fdisk 中为Linux LVM分区类型,在 gdisk 中为8e00)。 - 如果你使用主引导记录 (MBR) 分区表,请将分区类型 ID 设置为
8e(在 fdisk 中为Linux LVM分区类型)。
创建物理卷
列出所有可用于作为物理卷的设备
# lvmdiskscan
在设备上创建物理卷
# pvcreate DEVICE
此命令在每个设备上创建头信息,以便其能被 LVM 使用。正如 LVM#LVM building blocks 中定义的,DEVICE 可以是任何块设备,例如磁盘 /dev/sda、分区 /dev/sda2 或回环设备 (loop back device)。例如
# pvcreate /dev/sda2
你可以使用以下命令追踪创建的物理卷:
# pvdisplay
你也可以通过以下命令获取物理卷的摘要信息:
# pvscan
创建并扩展卷组
首先,你需要在任意一个物理卷上创建一个卷组
# vgcreate volume_group physical_volume
例如:
# vgcreate VolGroup00 /dev/sda2
有关卷组名称的有效字符列表,请参阅 lvm(8)。
扩展卷组同样简单
# vgextend volume_group physical_volume
例如,要将 sdb1 和 sdc 都添加到你的卷组中:
# vgextend VolGroup00 /dev/sdb1 # vgextend VolGroup00 /dev/sdc
你可以使用以下命令追踪卷组的增长情况:
# vgdisplay
如果你想向一个含有故障磁盘的 RAID 或镜像组添加磁盘,也可以采取此操作。
合并创建物理卷和卷组
LVM 允许你在一个简单的步骤中合并创建卷组和物理卷。例如,要使用上述三个设备创建名为 VolGroup00 的组,你可以运行:
# vgcreate VolGroup00 /dev/sda2 /dev/sdb1 /dev/sdc
该命令首先将三个分区设置为物理卷(如果必要),然后用这三个卷创建卷组。如果命令在任何设备上检测到现有文件系统,它会发出警告。
创建逻辑卷
- 如果你希望使用快照、逻辑卷缓存、精简配置 (thin provisioned) 逻辑卷或 RAID,请参阅 LVM#Logical volumes。
- 如果逻辑卷将使用 ext4 格式化,请在卷组中保留至少 256 MiB 的空闲空间,以便使用 e2scrub(8)。在用
-l 100%FREE创建最后一个卷后,可以通过lvreduce -L -256M volume_group/logical_volume减小其大小来实现。
现在我们需要在这个卷组上创建逻辑卷。你可以使用以下命令创建逻辑卷,指定新卷的名称、大小以及它所属的卷组:
# lvcreate -L size volume_group -n logical_volume
例如:
# lvcreate -L 10G VolGroup00 -n lvolhome
这将创建一个逻辑卷,稍后你可以通过 /dev/VolGroup00/lvolhome 访问它。与卷组一样,在创建逻辑卷时,除了 lvm(8) § VALID_NAMES 中列出的少数例外情况外,你可以使用任何你想要的名称。
你还可以指定一个或多个物理卷,以限制 LVM 分配数据的位置。例如,你可能希望在小型 SSD 上为根文件系统创建逻辑卷,而在较慢的机械硬盘上创建 home 卷。只需在命令行中添加物理卷设备即可,例如:
# lvcreate -L 10G VolGroup00 -n lvolhome /dev/sdc1
要使用卷组中所有剩余的空闲空间,请使用以下命令:
# lvcreate -l 100%FREE volume_group -n logical_volume
你可以使用以下命令追踪创建的逻辑卷:
# lvdisplay
modprobe dm_mod)。格式化并挂载逻辑卷
你的逻辑卷现在应该位于 /dev/YourVolumeGroupName/ 中。如果你找不到它们,请使用以下命令加载用于创建设备节点的模块并使卷组可用:
# modprobe dm_mod # vgscan # vgchange -ay
现在你可以格式化逻辑卷并像普通分区一样挂载它们(更多细节请参阅挂载文件系统)。
# mkfs.fstype /dev/volume_group/logical_volume # mount /dev/volume_group/logical_volume /mountpoint
例如:
# mkfs.ext4 /dev/VolGroup00/lvolhome # mount /dev/VolGroup00/lvolhome /home
/dev/Volgroup00/lvolhome)。不要选择创建逻辑卷时所使用的实际分区(不要使用:/dev/sda2)。配置系统
lvm2 钩子。如果你在为新安装系统而在 arch-chroot 环境中运行 mkinitcpio,则必须在 arch-chroot 内部安装 lvm2,这样 mkinitcpio 才能找到 lvm2 钩子。如果 lvm2 仅存在于 arch-chroot 外部,mkinitcpio 将输出 Error: Hook 'lvm2' cannot be found。添加 mkinitcpio 钩子
如果你的根文件系统位于 LVM 上,你需要启用相应的 mkinitcpio 钩子,否则你的系统可能无法启动。启用:
- 对于默认的基于 systemd 的 initramfs:
systemd和lvm2 - 对于基于 busybox 的 initramfs:
udev和lvm2
systemd 默认已存在。编辑该文件并在 block 和 filesystems 之间插入 lvm2,如下所示:
/etc/mkinitcpio.conf
HOOKS=(base systemd ... block lvm2 filesystems)
对于基于 busybox 的 initramfs:
/etc/mkinitcpio.conf
HOOKS=(base udev ... block lvm2 filesystems)
之后,你可以继续按照常规安装指令执行重新创建 initramfs 镜像步骤。
内核启动选项
如果根文件系统位于逻辑卷中,root= 内核参数必须指向映射设备,例如 /dev/vg-name/lv-name。