LVM 是 Logical Volume Manager (逻辑卷管理)的简写,它由 Heinz Mauelshagen 在 Linux 2.4 内核上实现。 LVM 将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘 来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可 以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性。
卷组
Volume Group(VG), LVM中的物理的磁盘分区,也就是PV,必须加入VG,可以将VG理解 为一个仓库或者是几个大的硬盘。
逻辑卷
Logical Volume(LV), 也就是从VG中划分的逻辑分区
创建PV:
pvcreate /dev/sda /dev/sdb1
查看PV:
pvscan
VG是由各个PV组成的,创建VG:
vgcreate VolGroup /dev/sda /dev/sdb1
VolGroup 是VG名,后面两个设备是加入到 VolGroup 卷组的设备。
查看VG:
vgdisplay
增加VG的设备成员:
vgextend VolGroup /dev/sda3
LV是在VG上面划分出来的。创建LV:
lvcreate -n osd -L 200G VolGroup
或:
lvcreate -n test -l 50 vg0
从卷组 VolGroup 中创建逻辑卷 osd, 用 -L 指定大小为200G,或用 -l 指 定大小为50个PE(Physical Extents,默认是4MB)
查看LV:
lvdisplay
改变LV大小:
lvresize -L +200G /dev/VolGroup/osd
该命令把 osd 逻辑卷增大了200G,类似的,如果要减小大小200G,用 -200G 即 可。逻辑卷的是从卷组划分来的,其大小当然不能比所在卷组的空间大。
resize2fs /dev/dnfs/osd
这样会改变 osd 逻辑卷上的Ext3文件系统的大小到 osd 逻辑卷的总大小, resize2fs 也可以指定大小,更多用法,请 man resize2fs. resize2fs 支 持在线改变Ext3文件系统大小,不需卸载即可调整大小。
如果不想用逻辑卷管理器了,可以从LV,VG到PV逐层删除:
lvremove /dev/dnfs/osd
把 dnfs 转为休眠状态:
vgchange -an dnfs
lvremove dnfs
pvremove /dev/sda
第一步, 先卸载分区
第二步, 强制检查文件系统的正确性:
e2fsck -f /dev/VolGroup/osd
第三步, 缩小文件系统的大小:
resize2fs /dev/VolGroup/osd 1G
即缩小文件系统大小到 1G.
第四步, 缩小逻辑卷的大小:
lvresize -L 1G /dev/VolGroup/osd
即缩小逻辑卷大小到 1G, 这里使用了绝对容量单位.
LUKS(Linux Unified Key Setup) 为 Linux 硬盘加密提供了一种标准,它不仅能通用于不 同的 Linux 发行版本,还支持多用户/口令。因为它的加密密钥独立于口令,所以如果口 令失密,我们可以迅速改变口令而无需重新加密真个硬盘。通过提供一个标准的磁盘上的 格式,它不仅方便之间分布的兼容性,而且还提供了多个用户密码的安全管理。必须首先 对加密的卷进行解密,才能挂载其中的文件系统。
工具: cryptsetup (默认已经安装)
常用参数: luksFormat, luksOpen, luksClose, luksAddKey
使用 cryptsetup 对分区进行了加密后,这个分区就不再允许直接挂载。 LUKS 也是一种 基于device mapper 机制的加密方案。如果要使用这个分区,必须对这个分区做一个映射 ,映射到 /dev/mapper 这个目录里去,我们只能挂载这个映射才能使用。然而做映射 的时候是需要输入解密密码的。
Crypsetup 工具加密的特点:
步骤:
Centos 6.x 上默认的卷组名称是 VolGroup.
创建一个LV:
lvcreate -n jiami -L 1G VolGroup
对LV进行加密:
cryptsetup luksFormat /dev/mapper/VolGroup-jiami
格式化时需要输入密码, 这个密码输入之后是不可更改的.
格式化之后, 我们需要先打开它, 然后才可以执行相关的操作(比如格式化, 挂载):
cryptsetup luksOpen /dev/mapper/VolGroup-jiami jiami
jiami 是解锁之后映射的设备名称, 比如 /dev/mapper/jiami.
下面执行格式化:
mkfs.ext4 /dev/mapper/jiami
之后就可以像正常分区一样操作
第1步:创建随机密钥文件
sudo dd if=/dev/urandom of=/root/keyfile bs=1024 count=4
第2步:将密钥文件设为只读为root
sudo chmod 0400 /root/keyfile
第3步:将密钥文件添加到LUKS
sudo cryptsetup luksAddKey /dev/mapper/VolGroup-jiami /root/keyfile
第4步:创建一个映射器
sudo nano /etc/crypttab
并添加一个新的条目
jiami /dev/mapper/VolGroup-jiami /root/keyfile luks
或者您可以使用设备的UUID。
步骤5:将设备安装在fstab中
sudo nano /etc/fstab
并添加一个新的条目
/dev/mapper/jiami /media/jiami ext4 defaults 0 2
0表示不自检; 1或2表示需要自检, 根分区设为1, 其他分区只能是2.
第6步:重新启动或重新安装
sudo mount -a
我最近不得不调整我们在安全的FTP服务器上使用的分区。幸运的是,我们在所有机器上使用LVM,因此这是一项简单的任务。我唯一担心的是它是一个LUKS加密分区,我担心由于加密算法和密钥根据新的大小而改变,我会丢失数据。在搜索之后,以下是我提出的调整LUKS分区大小而不丢失任何数据的步骤:
假设和开始信息:
步骤1.卸载文件系统
umount /secret
步骤2.运行文件系统检查以清理inode表,然后再使用它
fsck.ext3 -C 0 -f /dev/mapper/encrypted
步骤3.关闭LUKS文件系统
cryptsetup luksClose encrypted
步骤4.像扩展任何其他LVM一样扩展逻辑卷(我们正在添加额外的20G空间)
lvextend -L +20G /dev/root_VG/encrypted_LV
步骤5.重新打开加密文件系统并调整其大小
cryptsetup luksOpen /dev/root_VG/encrypted_LV encrypted
cryptsetup --verbose resize myfs
步骤6.再次FSCK(为了测量好)然后调整底层文件系统的大小(本例中为ext3)
fsck.ext3 -f /dev/mapper/encrypted
resize2fs /dev/mapper/encrypted
步骤7.安装新大小的LUKS文件系统并确保一切正常
mount /dev/mapper/encrypted /secret
下一个比较棘手,因为LVM不会自动支持调整大小。
步骤1.调整逻辑卷的大小
lvextend -L +50G /dev/VG-0/LV-1
步骤2.打开LUKS卷
cryptsetup luksOpen /dev/VG-0/LV-1 crypt_LV-1
步骤3.调整内部文件系统的大小(扩展到适合空间)
e2fsck -f /dev/mapper/crypt_LV-1
resize2fs /dev/mapper/crypt_LV-1
(e2fsck是一个很好的做法,无论如何都是由resize2fs强制实施的。)