Linux服务器搭建笔记-006:拓展/home目录容量

一、问题说明

Ubuntu服务器在使用过程中创建的新用户,每位用户会在/home目录下生成一个属于其个人的主文件夹。如果不限制各个用户的使用空间,所有的用户都会共用/home所挂载的硬盘。在这种多用户情况下,会很快的填满/home目录,导致服务器的硬盘空间不够用。

本篇博客通过添加额外的硬盘,实现对/home目录的扩容。 注意:本篇博客内容不采用换一块更大硬盘替代/home的方式,而是在保留原有/home的基础上,进一步拓展/home的空间。例如,服务器原有的/home目录大小为1TB,本博客会添加一块额外的2TB硬盘,组成一个3TB的更大的/home目录,并且不会损失原有的/home文件内容。

二、/home目录空间拓展

说明:本教程使用的系统为Ubuntu22.04。因为/home目录是Ubuntu系统日常使用过程中的系统目录,所以在当前开机状态下操作该目录是不被允许的,个人推荐使用一个Ubuntu系统的安装U盘,从U盘启动Ubuntu系统。具体从制作U盘和启动系统的过程自行百度。

1. 进入U盘系统

  • 当从U盘启动Ubuntu的安装过程时,会出现如下的选项,选择试用Ubuntu就可以进入U盘内的系统。请添加图片描述

2. LVM(逻辑卷管理)工具的使用

  • 使用LVM工具可以将原有隶属不同硬盘的空间进行打包合并。例如原本的/home文件夹在/dev/sda5的分区上面,大小是1TB,现在新添加了一块2T的硬盘,装入服务器后识别为/dev/sdb。LVM工具的功能就是可以将sda5和sdb进行一个打包操作,变成一组硬盘。具体查看硬盘挂载信息可以使用命令lsblk实现。
  • 安装LVM工具:
ff@EVA-01:~$ sudo apt install lvm2

3. 备份/home文件夹

  • 备份现有的/home文件夹,比如使用rsync工具备份/home目录。这个过程需要你有一块足够大的硬盘可以容纳/home,比如这块硬盘挂载到了/mnt/backup文件夹下面。
  • 注意:这个过程非常重要,因为后面需要把这个备份的/home信息重新拷贝回新合并的,更大的/home空间中。当然,如果是新服务器还没有用户信息不拷贝也没问题。如果不备份,整个/home文件夹会在后续被清空。
# 备份数据
ff@EVA-01:~$ sudo rsync -aAXHv --progress /home/ /mnt/backup/

4. 打包已有硬盘空间

  • 创建物理卷。物理卷是组成卷组的基本单位,卷组我们可以理解为合并后的整体硬盘(1TB sda5 + 2TB sdb = 3TB),
# 创建第一个卷组
ff@EVA-01:~$ sudo pvcreate /dev/sda5
# 创建第二个卷组
ff@EVA-01:~$ sudo pvcreate /dev/sdb
  • 在上述过程中可能会出现如下错误:
Cannot use /dev/sdb: device is partitioned

这个错误是因为硬盘中额外的独立分区,或者旧系统的磁盘签名,需要将其全部抹除。对于硬盘中的额外分区,可以使用fdisk(以sdb空间为例):

# 以sdb为例
ff@EVA-01:~$ sudo fdisk /dev/sdb
使用 d 命令删除分区
使用 w 命令保存更改并退出

如果删除全部分区后依然出现上述错误,那需要抹除各种签名:

# 抹除所有的硬盘信息
ff@EVA-01:~$ sudo wipefs -a /dev/sdb
  • 创建物理卷成功后,使用物理卷查询命令,可以查看已经创建好的两个物理卷:
ff@EVA-01:~$ sudo pvdisplay

5. 打包物理卷,创建卷组

  • 将上面创建的物理卷进行组合并,其中 cat_home 可以自定义为你自己喜欢的卷组名称:
ff@EVA-01:~$ sudo vgcreate cat_home /dev/sda5 /dev/sdb
  • 创建新的逻辑卷,其中 homelv 是逻辑卷的名称,可以自己自定义:
ff@EVA-01:~$ sudo lvcreate -n homelv -l 100%VG cat_home 

逻辑卷的地位和我们前面获得的 /sda5,/sdb的地位相同,可以作为硬盘的盘符了,此时的 homelv 可以简单理解为是一个已经合并好的,大小为3TB的新硬盘空间。

  • 格式化上面创建好的新空间:
ff@EVA-01:~$ sudo mkfs.ext4 /dev/cat_home /homelv
  • 创建逻辑卷成功后,使用逻辑卷查询命令,可以查看已经创建好的逻辑卷:
ff@EVA-01:~$ sudo lvdisplay

效果类似下图:

  --- Logical volume ---LV Path                /dev/cat_home/homelvLV Name                homelvVG Name                cat_homeLV UUID                81f8L6-fFxb-H0TR-LJXu-Ifwl-fRQO-5kxD6vLV Write Access        read/writeLV Creation host, time ubuntu, 2023-12-29 14:50:52 +0800LV Status              available# open                 1LV Size                <2.42 TiBCurrent LE             633119Segments               2Allocation             inheritRead ahead sectors     auto- currently set to     256Block device           253:0
  • 此时再查询物理卷,会发现物理卷上新增加了很多新信息:
ff@EVA-01:~$ sudo pvdisplay
  --- Physical volume ---PV Name               /dev/sda5VG Name               cat_homePV Size               684.63 GiB / not usable 3.00 MiBAllocatable           yes (but full)PE Size               4.00 MiBTotal PE              175265Free PE               0Allocated PE          175265PV UUID               cnlg0m-8G3T-Jab4-mEwR-AnKI-Uq1t-FALf30--- Physical volume ---PV Name               /dev/sdbVG Name               cat_homePV Size               <1.75 TiB / not usable <4.34 MiBAllocatable           yes (but full)PE Size               4.00 MiBTotal PE              457854Free PE               0Allocated PE          457854PV UUID               XeW7Hr-4ajr-HRKo-ezxZ-GyNX-a0lp-6Utfj5

6. 迁移/home数据到新的逻辑卷

  • 挂载新逻辑卷到临时位置 /mnt/new_home:
ff@EVA-01:~$ sudo mount /dev/cat_home/homelv /mnt/new_home
  • 将之前备份到 /mnt/backup/ 的内容恢复到 /mnt/new_home 中:
ff@EVA-01:~$ sudo rsync -aAXHv --progress /mnt/backup/ /mnt/new_home/
  • 数据回复完毕后,将以下挂载盘卸载:
# 卸载已挂载的盘符
ff@EVA-01:~$ sudo umount /home
ff@EVA-01:~$ sudo umount /mnt/backup/
ff@EVA-01:~$ sudo umount /mnt/new_home/

7. 修改原系统的启动挂载项

  • 说明:之前的所有操作我们都是在U盘上的Ubuntu系统中完成的,并没有启动原始服务器中的系统。现在我们需要修改原有服务器系统中启动过程的挂载项,使得系统启动后可以挂载我们创建的 /dev/cat_home/homelv 这个新硬盘到 /home 目录下。
  • 首先需要挂载原系统重的系统文件存储路径。这个系统路径就是服务器Ubuntu系统中 /etc/fstab 文件夹的存在目录,在我的系统中是 /dev/sda1,将其挂载到/mnt/oldsys目录下面,挂载到的目标目录可以自定义:
# 挂载原系统的/etc目录所在的磁盘
ff@EVA-01:~$ sudo mount /dev/sda1 /mnt/oldsys
  • 挂载完毕后修改原Ubuntu系统开机的挂载硬盘启动项:
# 挂载原系统的/etc目录所在的磁盘
ff@EVA-01:~$ sudo vim /mnt/oldsys/etc/fstab
  • 对上面fstab文件进行编辑,将已经打包好的硬盘挂载到/home下面,例如,我的路径设置最终如下(重点关注/home路径的挂载内容,挂载到/home路径下的其他硬盘需要排在/home之后进行挂载):
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda3 during installation
UUID=26a27c3d-b23f-484a-9a2b-1cb624d834a5 /               ext4    errors=remount-ro 0       1
# /boot was on /dev/sda2 during installation
UUID=7fabb7a1-c63f-407a-afb7-4272b9c51dea /boot           ext4    defaults        0       2
# /boot/efi was on /dev/sda1 during installation
UUID=7576-5283  /boot/efi       vfat    umask=0077      0       1
# /home was on /dev/cat_home/homelv
/dev/cat_home/homelv /home           ext4    defaults        0       2
# /home/A_DataSets0 was on /dev/sdc1 during installation
UUID=3632d36e-8b9a-4fc9-a202-3caddd5c3700 /home/A_DataSets0 ext4    defaults        0       2
# /home/A_DataSets1 was on /dev/sdd1 during installation
UUID=f439163a-4bd5-423b-888a-128564bc70cb /home/A_DataSets1 ext4    defaults        0       2
# swap was on /dev/sda4 during installation
UUID=3b0f58aa-e365-447a-98ba-e8ebc467985c none            swap    sw              0       0
/dev/disk/by-uuid/08bb9073-dd08-4689-9f3a-d71b5e9c4a0b /home/A_DataSets2 auto nosuid,nodev,nofail,x-gvfs-show 0 0
/dev/disk/by-uuid/e58b8ffb-fc27-47c6-9e41-1e9d809da14b /home/A_DataSets3 auto nosuid,nodev,nofail,x-gvfs-show 0 0

(来自一名励志用“普通话”讲技术的菜狗子~)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/823423.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

.json文件转为.dll文件后还能读取吗?

(只是修改了后缀名而已&#xff0c;做一个伪装&#xff09; 测试&#xff1a; QFile file(QApplication::applicationDirPath() "/config.dll");qDebug()<<QApplication::applicationDirPath() "/config.dll";if (file.open(QIODevice::ReadOnly))…

Vue: 事件修饰符, 键盘事件, 鼠标事件,计算属性

目录 事件修饰符 阻止默认事件 阻止冒泡 允许触发一次 捕获模式 self passive 键盘事件 keyup & keydown 按键别名 注意tab 注意系统按键 自定义按键 鼠标事件 简介 鼠标焦点事件 计算属性 差值语法实现 methods实现 computed实现 get() set() 总…

PLC-IoT 网关开发札记(1):存档和分发 Android App

开篇记 PLC-IoT 网关是作者开发的产品&#xff0c;根据客户需求&#xff0c;立项开发手机 App&#xff0c;为用户提供一种方便、直观、友好的设备操控方式。网关运行的是嵌入式 Linux 操作系统&#xff0c;计划通过某一种通信协议&#xff08;例如 HTTP&#xff0c;MQTT或者 T…

KMP算法的理解+板子

对kmp算法的理解中&#xff0c;很重要的一点就是next数组。 很多人不理解next数组的含义&#xff0c;是因为它同时具有两个意思&#xff0c;而且这两个意思在不同的环境下不同。 现在给你两个字符串&#xff1a; 一个是文本串 text 一个是模板串 pattern 然后定义两个指针…

react+redux+antd-mobile 之 记账本案例

1.环境搭建 //使用CRA创建项目&#xff0c;并安装必要依赖&#xff0c;包括下列基础包 //1. Redux状态管理 - reduxjs/toolkit 、 react-redux //2. 路由 - react-router-dom //3. 时间处理 - dayjs //4. class类名处理 - classnames //5. 移动端组件库 - antd-mobile //6. 请…

偏好对齐RLHF-OpenAI·DeepMind·Anthropic对比分析

OpenAI paper: InstructGPT, Training language models to follow instructions with human feedback paper: Learning to summarize from human feedback Introducing ChatGPT 解密Prompt系列4介绍了InstructGPT指令微调的部分&#xff0c;这里只看偏好对齐的部分 样本构建…

竞赛保研 基于机器学习与大数据的糖尿病预测

文章目录 1 前言1 课题背景2 数据导入处理3 数据可视化分析4 特征选择4.1 通过相关性进行筛选4.2 多重共线性4.3 RFE&#xff08;递归特征消除法&#xff09;4.4 正则化 5 机器学习模型建立与评价5.1 评价方式的选择5.2 模型的建立与评价5.3 模型参数调优5.4 将调参过后的模型重…

12.21自动售货机,单物品,多物品

自动售货机 if朴素方法 一种思路是用寄存器cnt记录已有的最小单位货币量&#xff0c;这里就是0.5 当d1时&#xff0c;cnt1;d2时&#xff0c;cnt2;d3时&#xff0c;cnt4; timescale 1ns/1ns module seller1(input wire clk ,input wire rst ,input wire d1 ,input wire d2 …

苹果CMS超级播放器专业版无授权全开源,附带安装教程

源码介绍 超级播放器专业版v1.0.8&#xff0c;内置六大主流播放器&#xff0c;支持各种格式的视频播放&#xff0c;支持主要功能在每一个播放器内核中都相同效果。 搭建教程 1.不兼容IE浏览器 2.php版本推荐7.4 支持7.1~7.4 3.框架引入不支持同时引入多个播放器 json对接教…

mfc100u.dll文件丢失了要怎么解决?修复mfc100u.dll详细指南

mfc100u.dll文件丢失了要怎么解决?首先让我们扒一扒什么是 mfc100u.dll。这玩意儿是 Microsoft Visual Studio 2010 的一部分&#xff0c;它就像一款程序生活中不可或缺的零件&#xff0c;没了它&#xff0c;程序肯定跑不起来。想想看&#xff0c;没有一个重要的零件&#xff…

【UE5蓝图】读取本地json文件修改窗口大小

效果 插件 蓝图 1.判断文件存在 2.1文件不存在&#xff0c;生成文件 {"ResolutionX":540, "ResolutionY":960} 2.2文件存在&#xff0c;直接读取 3.设置窗口大小 遇到的坑 1.分辨率太大&#xff0c;导致效果不理想&#xff0c;建议先往小填写。 2.选对…

Java核心知识点1-java和c++区别、隐式和显示类型转换

java和c区别 java通过虚拟机实现跨平台特性&#xff0c;但c依赖于特定的平台。java没有指针&#xff0c;它的引用可以理解为安全指针&#xff0c;而c和c一样具有指针。java支持自动垃圾回收&#xff0c;而c需要手动回收。java不支持多重继承&#xff0c;只能通过实现多个接口来…

TCP/IP的五层网络模型

目录 封装&#xff08;打包快递&#xff09; 6.1应用层 6.2传输层 6.3网络层 6.4数据链路层 6.5物理层 分用&#xff08;拆快递&#xff09; 6.5物理层 6.4数据链路层 6.3网络层 6.2传输层 6.1应用层 封装&#xff08;打包快递&#xff09; 6.1应用层 此时做的数据…

程序的编译、链接

目录 前言&#xff1a; 前置知识回顾 宏 宏定义常量 宏定义语句 宏定义函数 条件编译 应用场景 编译过程概览 预编译阶段 编译阶段 汇编阶段 链接阶段 前言&#xff1a; 在ANSI C的任何一种实现中&#xff0c;存在两种不同的环境&#xff0c;第1种是翻译环境&#x…

12.30 二叉树中等题

236. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff…

yolov8实战第四天——yolov8图像分类 ResNet50图像分类(保姆式教程)

yolov8实战第一天——yolov8部署并训练自己的数据集&#xff08;保姆式教程&#xff09;_yolov8训练自己的数据集-CSDN博客在前几天&#xff0c;我们使用yolov8进行了部署&#xff0c;并在目标检测方向上进行自己数据集的训练与测试&#xff0c;今天我们训练下yolov8的图像分类…

【滑动窗口】C++算法:K 个不同整数的子数组

作者推荐 动态规划 多源路径 字典树 LeetCode2977:转换字符串的最小成本 本题涉及知识点 滑动窗口 LeetCoe992 K 个不同整数的子数组 给定一个正整数数组 nums和一个整数 k&#xff0c;返回 nums 中 「好子数组」 的数目。 如果 nums 的某个子数组中不同整数的个数恰好为 …

【AI导师】利用Coding Agent完成AIGC编程

利用Coding Agent完成AIGC编程 一、前言二、Coding Agent三、1024code四、AI导师README项目初版功能定义代码结构设计方案函数方法设计方案迭代记录 一、前言 AI产品的发展确实在过去两年年中取得了显著进展&#xff0c;尤其是在编程领域。一开始&#xff0c;ChatGPT和类似的语…

前后端分离架构的特点以及优缺点

文章目录 一、前后端不分离架构(传统单体结构)1.1 什么是前后端不分离1.2 工作原理1.3 前后端不分离的优缺点1.4 应用场景 二、前后端分离架构2.1 为什么要前后端分离2.2 什么是前后端分离2.3 工作原理2.4 前后端分离的优缺点 参考资料 一、前后端不分离架构(传统单体结构) 首…

阿里后端实习二面

阿里后端实习二面 记录面试题目&#xff0c;希望可以帮助到大家 类加载的流程&#xff1f; 类加载分为三个部分&#xff1a;加载、连接、初始化 加载 类的加载主要的职责为将.class文件的二进制字节流读入内存(JDK1.7及之前为JVM内存&#xff0c;JDK1.8及之后为本地内存)&…