前几天我用树莓派下载 Android 6.0 的源码,本来是挂载了一个 32G 的 U 盘和一张 16G 的内存卡,网上说 Android 4.4 源码有 20 多 G,我想 6.0 的 32G 应该够了。
可谁知道 32G(实际只有 30G )全部都填满了,还提示硬盘空间不足。
可惜我那 3T 的移动硬盘用在树莓派上电压不够挂载不上去,手头没有比 32G 更大的存储了,我就想 U 盘能不能扩容(注意!扩容有害!)。
后来找来找去就看到了 LVM(LVM 不是扩容)。
逻辑卷管理器(Logical Volume Manager,缩写 LVM,又译为逻辑卷宗管理器、逻辑扇区管理器、逻辑磁盘管理器),是 Linux 核心所提供的逻辑卷管理(Logical volume management)功能。它在硬盘的硬盘分区之上,又创建一个逻辑层,以方便系统管理硬盘分区系统。—— 维基百科:逻辑卷管理器
概念可能难以理解,下面我画了张图(才发现重装系统之后 PS 都没装):
对于用户来说,是装了多个物理硬件,如 U 盘、内存卡等;但对 Linux 来说,却只有一个分区。
还是以我下载 Android 源码作为场景,方便大家理解。
我想下载 Android 6.0 的源码,由于一个 32G 的 U 盘不够大,所以用 LVM 来把一个 32G 的 U 盘和一个 16G 的内存卡合并成一个分区(需要格式化,请先备份好)。
前期准备#
使用 fdisk -l
命令查看磁盘:
可以看到实际容量为 30G U 盘和 14.6G 的内存卡。然后就开始合并了,首先安装 LVM :
apt-get install lvm2
由于两个都是 NTFS 格式的,所以需要格式化成 LVM 格式。先选择内存卡(不带 “1”):
fdisk /dev/sda
先 p
查看分区:
可以看到只有一个分区,接着 d
选择删除的分区(因为只有一个分区所以会直接删除没有选项):
接着 n
新建分区,全部直接回车默认即可:
再次 p
查看分区:
可以看到类型已经变成 Linux 了,但是使用 LVM 还需要把 Id 变成 8e ,t
更改分区类型:
因为只有一个分区,所以会直接选择分区 1,输入分区类型 8e
即可,再次 p
查看:
可以看见 Id 变成了 8e,类型也变成了 Linux LVM。最后 w
写入更改即可:
剩下还有一个分区就自己做了,操作都是一样的。做好后 fdisk -l
查看分区:
当两个分区类型都变成 Linux LVM 后就能正式开始做 LVM 了。
创建物理磁盘#
首先创建物理磁盘,命令是 pvcreate /dev/sda1 /dev/sdb1 /dev/sdc1 ......
。可以创建一个或者多个,在这里是:
pvcreate /dev/sda1 /dev/sdb1
创建成功了,可以用 pvs
查看物理磁盘:
创建卷组#
创建卷组的命令是:
vgcreate VolGroup /dev/sda1 /dev/sdb1
创建完之后使用 vgs
查看:
可以看到,卷组的大小是 44.56g,也就是 U 盘和内存卡的总和。使用 vgdisplay VolGroup
可查看新创建的卷组 VolGroup 的详情:
创建逻辑卷#
在 VolGroup 的详情中我们可以看见 Total PE 为 11408,也就是可分配的大小为:4M * 11408 = 45632M = 44.5625G
我们使用全部 11408 个 PE 来创建一个名为 storage 的逻辑卷:
lvcreate -l 11408 -n storage VolGroup
然后用 lvs
查看:
使用 ext4 文件系统来创建卷,然后挂载到 /mnt/storage(记得要先执行 mkdir /mnt/storage
创建 /mnt/storage 文件夹,我之前先创建过了),最后使用 df -h
查看分区:
mkfs.ext4 /dev/VolGroup/storage
mount /dev/VolGroup/storage /mnt/storage
开机挂载#
在 /etc/fstab 中添加一行:
/dev/mapper/VolGroup-storage /mnt/storage ext4 defaults 0 0
然后重启看看有没有自动挂载。