- 07
- 06月
LVM 是 Logical Volume Manager (逻辑卷管理)的简写,它由 Heinz Mauelshagen 在 Linux 2.4 内核上实现。 LVM 将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘 来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可 以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性。
目录
1 LVM 磁盘管理
1.1 术语
- 物理卷
- Physical Volume(PV), 即物理的磁盘分区
- 卷组
- Volume Group(VG), LVM中的物理的磁盘分区,也就是PV,必须加入VG,可以将VG理解 为一个仓库或者是几个大的硬盘。
- 逻辑卷
- Logical Volume(LV), 也就是从VG中划分的逻辑分区
1.2 磁盘管理
1.2.2 卷组(VG)操作
VG是由各个PV组成的,创建VG:
vgcreate VolGroup /dev/sda /dev/sdb1
VolGroup 是VG名,后面两个设备是加入到 VolGroup 卷组的设备。
查看VG:
vgdisplay
增加VG的设备成员:
vgextend VolGroup /dev/sda3
1.2.3 逻辑卷(LV)操作
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 即 可。逻辑卷的是从卷组划分来的,其大小当然不能比所在卷组的空间大。
1.2.4 改变 Ext2/3/4 文件系统大小
resize2fs /dev/dnfs/osd
这样会改变 osd 逻辑卷上的Ext3文件系统的大小到 osd 逻辑卷的总大小, resize2fs 也可以指定大小,更多用法,请 man resize2fs. resize2fs 支 持在线改变Ext3文件系统大小,不需卸载即可调整大小。
1.2.5 删除操作
如果不想用逻辑卷管理器了,可以从LV,VG到PV逐层删除:
lvremove /dev/dnfs/osd
把 dnfs 转为休眠状态:
vgchange -an dnfs lvremove dnfs pvremove /dev/sda
1.2.6 缩小分区大小
第一步, 先卸载分区
第二步, 强制检查文件系统的正确性:
e2fsck -f /dev/VolGroup/osd
第三步, 缩小文件系统的大小:
resize2fs /dev/VolGroup/osd 1G
技巧
即缩小文件系统大小到 1G.
第四步, 缩小逻辑卷的大小:
lvresize -L 1G /dev/VolGroup/osd
技巧
即缩小逻辑卷大小到 1G, 这里使用了绝对容量单位.
2 LUKS 磁盘加密
2.1 概念
LUKS(Linux Unified Key Setup) 为 Linux 硬盘加密提供了一种标准,它不仅能通用于不 同的 Linux 发行版本,还支持多用户/口令。因为它的加密密钥独立于口令,所以如果口 令失密,我们可以迅速改变口令而无需重新加密真个硬盘。通过提供一个标准的磁盘上的 格式,它不仅方便之间分布的兼容性,而且还提供了多个用户密码的安全管理。必须首先 对加密的卷进行解密,才能挂载其中的文件系统。
工具: cryptsetup (默认已经安装)
常用参数: luksFormat, luksOpen, luksClose, luksAddKey
使用 cryptsetup 对分区进行了加密后,这个分区就不再允许直接挂载。 LUKS 也是一种 基于device mapper 机制的加密方案。如果要使用这个分区,必须对这个分区做一个映射 ,映射到 /dev/mapper 这个目录里去,我们只能挂载这个映射才能使用。然而做映射 的时候是需要输入解密密码的。
Crypsetup 工具加密的特点:
- 加密后不能直接挂载
- 加密后硬盘丢失也不用担心数据被盗
- 加密后必须做映射才能挂载
步骤:
- 创建分区并加密分区
- 映射分区
- 格式化分区并挂载使用
- 关闭映射分区
2.2 基本操作
注解
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
之后就可以像正常分区一样操作
2.3 自动挂载
Step 1: Create a random keyfile
sudo dd if=/dev/urandom of=/root/keyfile bs=1024 count=4
Step 2: Make the keyfile read-only to root
sudo chmod 0400 /root/keyfile
Step 3: Add the keyfile to LUKS
sudo cryptsetup luksAddKey /dev/mapper/VolGroup-jiami /root/keyfile
Step 4: Create a mapper
sudo nano /etc/crypttab
and add a new entry like
jiami /dev/mapper/VolGroup-jiami /root/keyfile luks
or you can use the UUID of the device.
Step 5: Mount the device in fstab
sudo nano /etc/fstab
and add a new entry like
/dev/mapper/jiami /media/jiami ext4 defaults 0 2
注解
0表示不自检; 1或2表示需要自检, 根分区设为1, 其他分区只能是2.
Step 6: Reboot or remount
sudo mount -a
2.4 更改分区大小
2.4.1 Resize a LUKS Encryped LVM Partition
I recently had to resize the partition we use on our secure FTP server. Luckily, we use LVM on all our machines, so this was a simple task. My only concern was that it was a LUKS encrypted partition, I was afraid I would loose data due to the encryption algorithms and keys changing based upon the new size. After searching around, Here are the steps I came up with to resize a LUKS partition without loosing any data:
Assumptions and beginning info:
- We have a LUKS filesystem named encrypted that is on alogical volume named encrypted_LV
- The encypted_LV belongs to a volume group named root_VG
- We are mounting this filesystem at /secret
- We are using ext3 as the underlying filesystem
- We want to extend the volume by adding 20 Gig from our root_VG volume group (It was already available as free space).
Step 1. Unmount the filesystem
umount /secret
Step 2. Run a filesystem check to clean up the inode tables before working with it
fsck.ext3 -C 0 -f /dev/mapper/encrypted
Step 3. Close out the LUKS filesystem
cryptsetup luksClose encrypted
Step 4. Extend the Logical Volume like you would any other LVM (We are adding additional 20G of space)
lvextend -L +20G /dev/root_VG/encrypted_LV
Step 5. Re-open the encrypted filesystem and resize it
cryptsetup luksOpen /dev/root_VG/encrypted_LV encrypted cryptsetup --verbose resize myfs
Step 6. FSCK again (for good measure) and then resize the underlying filesystem (ext3 in this example)
fsck.ext3 -f /dev/mapper/encrypted resize2fs /dev/mapper/encrypted
Step 7. Mount up the newly sized LUKS filesystem and make sure everything is OK
mount /dev/mapper/encrypted /secret
2.4.2 Resizing ext4 on LUKS on LVM
The next one is trickier, as LVM doesn't automatically support resizing.
Step 1. resize the logical volume
lvextend -L +50G /dev/VG-0/LV-1
Step 2. open the LUKS volume
cryptsetup luksOpen /dev/VG-0/LV-1 crypt_LV-1
Step 3. resize the inner filesytem (extend to fit space)
e2fsck -f /dev/mapper/crypt_LV-1 resize2fs /dev/mapper/crypt_LV-1
(the e2fsck is a good practice, and it is enforced by resize2fs anyways.)