网站首页 文章专栏 服务器home分区在线转lvm
服务器home分区在线转lvm
创建于:2019-06-04 01:17:15 更新于:2024-11-22 10:01:45 羽瀚尘 4295
云服务 ubuntu

前言

技术总在前进,而自己的知识也总在增长。几年前的知识可能过时,几年前装的服务器也可能早就不满足使用条件。

我们实验室的服务器大概是3、4年前买的,128G内存+GTX1080Ti x 4。性能虽说不错,但最近发现home目录空间不够。深度学习是靠数据驱动的,没有磁盘存数据自然服务器也就废了。

经过一两天的研究,我觉得服务器还可以抢救一下,于是死磨硬泡要来了sudo权限,开始大刀阔斧干一番。

注意,以下的部分截图来源于虚拟机实验,GPU实际操作和此类似。建议买按量计费的云服务器和云硬盘,比本机创建虚拟机方便快捷

必备条件

  1. home目录是单独分区
  2. 磁盘剩余空间大于home空间,或者有另一块磁盘

手头这台服务器的状态是这样的: 1. home目录单独分区,700G的空间占满 2. 第二块磁盘容量4T,仅一个分区,已占用300G 3. 所有分区都是普通Linux分区

lvm简介

lvm的核心概念有以下四个: ①PE  (Physical Extend)  物理拓展

②PV  (Physical Volume)  物理卷

③VG  (Volume Group)  卷组

④LV  (Logical Volume)  逻辑卷

在使用LVM对磁盘进行动态管理以后,我们是以逻辑卷的方式呈现给上层的服务的。所以我们所有的操作目的,其实就是去创建一个LV(Logical Volume),逻辑卷就是用来取代我们之前的分区,我们通过对逻辑卷进行格式化,然后进行挂载操作就可以使用了

下图展示了他们之间的关系。

image.png

在实际操作中,格式化为PE的过程对用户不可见(至少目前的操作中我没有碰到过),需要用户进行的顺序操作有以下四个: 1. 分区, 可以用fdisk也可以用gparted 2. pvcreate创建pv 3. vgcreate创建vg 4. lvcreate创建lv

如果对lvm的概念还有不了解的地方,参考这里

新建lvm分区

新建一个lvm分区有两种方式。要么缩减第二块硬盘的现有分区,并将剩余空间格式化为lvm分区;要么新增硬盘,并直接分区为lvm格式。

新增磁盘方式(虚拟机实验)

新增磁盘方式是自己当时在虚拟机实验做的,为了不浪费这些截图,只好放到这里了。可能会让文章看起来有点乱,可以直接跳到缩减分区方式

  1. 购买一个10G的云盘

0015

可以看到新硬盘

0035

  1. 新建分区并设立lvm标志
fdisk /dev/vdb
# 跟随提示操作

0036 0002

0022 在交互命令行中选择t设立标志,8e是lvm分区的标志。 0009 0030

这个只是设立一个标志,方便操作人员记忆哪个盘都用来做了什么。

  1. 设立物理卷 & 设立组 & 打印组信息
pvcreate /dev/vdb1
vgcreate vgdata /dev/vdb1
vgdisplay
vgs

0024

vgs也可以打印组信息,更简洁 0039

  1. 设立逻辑卷 & 打印逻辑卷信息
lvcreate -L 9G -n home vgdata
lvs
lvdisplay

0026

  1. 使用mkfs.ext4 制作文件系统 & 挂载到/home/home
mkfs.ext4 /dev/vgdata/home
mkdir /test
mount  /dev/vgdata/home /test

0040

分区缩减方式(GPU服务器实操)

分区缩减暂时没找到好用的命令行方法,我们使用图形界面。如果是无界面的服务器,可以用Mobaxterm + x11 forwarding方式,ssh登录后键入sudo gparted,图形界面会在本地弹出。

  1. 卸载磁盘,否则无法进行缩减分区操作
  2. 拖动或者输入容量,实现分区缩减
  3. 剩余的容量重新分区,选择lvm格式 (如果没有该选项,sudo apt install lvm2安装)

(以下两张图片是事后截图,作示例用。可以看到,lvm分区与普通分区不同,即使没有用那么多空间,gparted也认为空间被占满了) image.png

image.png

  1. 创建lvm分区并挂载

新建磁盘一节的内容很相似,简略概述。

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

迁移home目录

使用rsync可以实现带属性迁移home目录, 这里我们将/home目录的内容迁移到/test目录。

  1. 复制
sudo rsync -aXS /home/. /test/.

0054

  1. 重命名原home & 查看uuid & 修改fstab
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 0103 如果要求在重启后依旧挂载/home_backup,那么把该分区也写到fstab中。

在 /etc/fstab配置文件中你可以以三种不同的方法表示文件系统:内核名称、UUID 或者 label。使用 UUID 或是 label 的好处在于它们与磁盘顺序无关。如果你在 BIOS 中改变了你的存储设备顺序,或是重新拔插了存储设备,或是因为一些 BIOS 可能会随机地改变存储设备的顺序,那么用 UUID 或是 label 来表示将更有效。

所有分区和设备都有唯一的 UUID。它们由文件系统生成工具 (mkfs.*) 在创建文件系统时生成。

  1. 挂载并检查

挂载所有分区

mount -a
ls /home

image.png

检查磁盘使用情况

df -h

image.png

其他磁盘相关命令

查看UUID

  1. 方法一: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
  1. 方法二: 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

参考

对使用lvm的流程介绍很详细,最终参考 使用rsync迁移home,最终参考