专栏首页技术向服务器home分区在线转lvm

服务器home分区在线转lvm

本文由腾讯云+社区自动同步,原文地址 https://stackoverflow.club/article/server_home_lvm_online/

前言

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

我们实验室的服务器大概是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),逻辑卷就是用来取代我们之前的分区,我们通过对逻辑卷进行格式化,然后进行挂载操作就可以使用了

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

在实际操作中,格式化为PE的过程对用户不可见(至少目前的操作中我没有碰到过),需要用户进行的顺序操作有以下四个:

  1. 分区, 可以用fdisk也可以用gparted
  2. pvcreate创建pv
  3. vgcreate创建vg
  4. lvcreate创建lv

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

新建lvm分区

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

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

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

  1. 购买一个10G的云盘

可以看到新硬盘

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

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

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

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

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

  1. 设立逻辑卷 & 打印逻辑卷信息
lvcreate -L 9G -n home vgdata
lvs
lvdisplay
  1. 使用mkfs.ext4 制作文件系统 & 挂载到/home/home
mkfs.ext4 /dev/vgdata/home
mkdir /test
mount  /dev/vgdata/home /test 

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

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

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

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

  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. 复制1sudo rsync -aXS /home/. /test/.
  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

如果要求在重启后依旧挂载/home_backup,那么把该分区也写到fstab中。

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

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

  1. 挂载并检查

挂载所有分区

mount -a
ls /home

检查磁盘使用情况

df -h

其他磁盘相关命令

查看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,最终参考

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • numpy.logical_or

    numpy.logical_or(x1, x2, /, out=None, *, where=True, casting='same_kind', order=...

    于小勇
  • Nginx多个子域名映射到不同的端口或 ip

    我决定采用采用 子域名区分服务 的方式,然后使用 nginx 做反向代理,分发到不同的端口。

    Java架构师历程
  • thinkphp执行计划任务crontab

    tp5.1中的php 计划任务的实现,本质上可以分为两种第一种封装在框架内部,在crontab -e中只要添加一条,然后在框架内去扩展内容就好了(Laravel...

    php007
  • numpy.logical_and()

    numpy.logical_and(x1, x2, /, out=None, *, where=True, casting='same_kind', order...

    于小勇
  • 蓝默空间のLvBlog-1.1.2.20191030_release开源啦~

    The LvBlog Application is open-source software licensed under the MIT license.

    蓝默空间
  • Linux 命令(81)—— chmod 命令

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    Dabelv
  • crontab定时执行python脚本不成功解决方案

    Learn the rules like a pro, so you can break them like an artist.

    小闫同学啊
  • mybatis批量增、删、改(更新)操作oracle和mysql批量写法小记

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    eguid
  • Linux xargs 命令

    xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读...

    于小勇
  • Linux 命令(82)—— chgrp 命令

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    Dabelv

扫码关注云+社区

领取腾讯云代金券