网站首页 文章专栏 服务器home分区在线转lvm
技术总在前进,而自己的知识也总在增长。几年前的知识可能过时,几年前装的服务器也可能早就不满足使用条件。
我们实验室的服务器大概是3、4年前买的,128G内存+GTX1080Ti x 4。性能虽说不错,但最近发现home目录空间不够。深度学习是靠数据驱动的,没有磁盘存数据自然服务器也就废了。
经过一两天的研究,我觉得服务器还可以抢救一下,于是死磨硬泡要来了sudo权限,开始大刀阔斧干一番。
注意,以下的部分截图来源于虚拟机实验,GPU实际操作和此类似。建议买按量计费的云服务器和云硬盘,比本机创建虚拟机方便快捷
手头这台服务器的状态是这样的: 1. home目录单独分区,700G的空间占满 2. 第二块磁盘容量4T,仅一个分区,已占用300G 3. 所有分区都是普通Linux分区
lvm的核心概念有以下四个: ①PE (Physical Extend) 物理拓展
②PV (Physical Volume) 物理卷
③VG (Volume Group) 卷组
④LV (Logical Volume) 逻辑卷
在使用LVM对磁盘进行动态管理以后,我们是以逻辑卷的方式呈现给上层的服务的。所以我们所有的操作目的,其实就是去创建一个LV(Logical Volume),逻辑卷就是用来取代我们之前的分区,我们通过对逻辑卷进行格式化,然后进行挂载操作就可以使用了
下图展示了他们之间的关系。
在实际操作中,格式化为PE的过程对用户不可见(至少目前的操作中我没有碰到过),需要用户进行的顺序操作有以下四个:
1. 分区, 可以用fdisk也可以用gparted
2. pvcreate
创建pv
3. vgcreate
创建vg
4. lvcreate
创建lv
如果对lvm的概念还有不了解的地方,参考这里
新建一个lvm分区有两种方式。要么缩减第二块硬盘的现有分区,并将剩余空间格式化为lvm分区;要么新增硬盘,并直接分区为lvm格式。
新增磁盘方式是自己当时在虚拟机实验做的,为了不浪费这些截图,只好放到这里了。可能会让文章看起来有点乱,可以直接跳到缩减分区方式
。
可以看到新硬盘
fdisk /dev/vdb # 跟随提示操作
在交互命令行中选择t设立标志,8e
是lvm分区的标志。
这个只是设立一个标志,方便操作人员记忆哪个盘都用来做了什么。
pvcreate /dev/vdb1 vgcreate vgdata /dev/vdb1 vgdisplay vgs
vgs也可以打印组信息,更简洁
lvcreate -L 9G -n home vgdata lvs lvdisplay
mkfs.ext4 /dev/vgdata/home mkdir /test mount /dev/vgdata/home /test
分区缩减暂时没找到好用的命令行方法,我们使用图形界面。如果是无界面的服务器,可以用Mobaxterm + x11 forwarding方式,ssh登录后键入sudo gparted
,图形界面会在本地弹出。
sudo apt install lvm2
安装)(以下两张图片是事后截图,作示例用。可以看到,lvm分区与普通分区不同,即使没有用那么多空间,gparted也认为空间被占满了)
与新建磁盘
一节的内容很相似,简略概述。
pvcreate /dev/sdb2
vgcreate vgdata /dev/sdb2
vgs
lvcreate -L 1.7T -n home vgdata
lvs
mkfs.ext4 /dev/vgdata/home
mkdir /test
mount /dev/vgdata/home /test
使用rsync可以实现带属性迁移home目录, 这里我们将/home目录的内容迁移到/test目录。
sudo rsync -aXS /home/. /test/.
umount /test sudo mv /home /home_backup sudo mkdir /home blkid vim /etc/fstab
UUID=fd394f10-8c1b-4150-852a-b08cbbb81551 /home ext4 nodev,nosuid 0 2
修改后的fstab
如果要求在重启后依旧挂载/home_backup
,那么把该分区也写到fstab
中。
在 /etc/fstab配置文件中你可以以三种不同的方法表示文件系统:内核名称、UUID 或者 label。使用 UUID 或是 label 的好处在于它们与磁盘顺序无关。如果你在 BIOS 中改变了你的存储设备顺序,或是重新拔插了存储设备,或是因为一些 BIOS 可能会随机地改变存储设备的顺序,那么用 UUID 或是 label 来表示将更有效。
所有分区和设备都有唯一的 UUID。它们由文件系统生成工具 (mkfs.*) 在创建文件系统时生成。
挂载所有分区
mount -a ls /home
检查磁盘使用情况
df -h
cat /etc/fstab
输出
# <file system> <mount point> <type> <options> <dump> <pass> # / was on /dev/sda6 during installation UUID=da65e0ff-f27c-47a6-98a3-e40b4683a261 / ext4 errors=remount-ro 0 1 # /boot was on /dev/sda1 during installation UUID=d4418b1b-c57f-4da5-ab80-b38a60feefc9 /boot ext4 defaults 0 2 # /home was on /dev/sda7 during installation UUID=944e97ca-fc2a-46aa-91f4-8b103da4ee78 /home ext4 defaults 0 2 # /home1 was on /dev/sdb1 during installation UUID=92eac4c2-1ca9-4809-bb88-5f0dede9facd /home1 ext4 defaults 0 2 # swap was on /dev/sda5 during installation UUID=f0d39a25-b047-4a9e-b4e5-99985c92abf9 none swap sw 0 0
lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT sr0 sda ├─sda2 ├─sda5 LVM2_member UUKy7M-V4cC-hP6L-ApO3-GUKk-fdWM-XelacC │ ├─ubuntu--vg-swap_1 swap 8b7f86f8-486f-4698-8ee9-0e2fd51d6381 [SWAP] │ └─ubuntu--vg-root ext4 4fe81706-bfab-4c92-ad29-4cdf06c4a050 / └─sda1 ext2 7b4bc140-3a26-4b51-9664-65875228f5ad /boot