当前位置: 首页 > news >正文

[运维工具]ubuntu下迁移home目录至新的分区教程详解

ubuntu下迁移home目录至新的分区教程详解

前言

首先声明一下,因为此教程涉及到用户重要资料数据,所以操作前:

  • 数据无价,请一定要先备份!
  • 数据无价,请一定要先备份!
  • 数据无价,请一定要先备份!

如果你有以下的烦恼:

  • 当初装系统的时候,忘记分 /home 目录;
  • 当初装系统的时候, /home 分区分了较小的空间;
  • 用了Ubuntu一段时间后,发现 /home 所在的磁盘即将爆满,但是磁盘没有可以拓展的空间

因此,为了解决磁盘 爆满 的问题,只能将数据“搬家”了,下面是整个“搬家”的过程。

正文

1、检测新硬盘

在插入新硬盘之前,我们需要检测硬盘是否被识别。可以使用以下命令检查:

sudo fdisk -l

如果新的硬盘识别不出来,可以尝试重启系统之后再次检查。

2、格式化新分区
在对新硬盘进行分区之后,需要对新分区进行格式化。可以使用以下命令对新分区进行格式化:

sudo mkfs.ext4 /dev/sdb5

其中,/dev/sdb5 是新分区的设备文件名,ext4 是要使用的文件系统类型。如果要使用其他文件系统类型,可以将 mkfs.ext4 替换成相应的文件系统类型,如 mkfs.ntfs

3、挂载新分区
在对新分区进行格式化之后,需要将其挂载到系统目录下才能使用。可以使用以下命令挂载新分区:

sudo mkdir /home_data
sudo mount /dev/sdb5 /home_data

注意:

如果你想要挂载一个新的硬盘作为磁盘使用,那么到这里就可以了。

只不过,需要每次开机后都执行一下 挂载 命令。

将挂在添加到启动挂在文件中就会开机自动挂载 /etc/fstab ,在文件中增加一行:

/dev/sdb5 /home_data ext4 defaults 0 2

其中:

  • /dev/sdb5:要挂载的硬盘
  • /home_data:挂载目录
  • ext4:磁盘类型
  • defaults:所有选项全部使用默认配置,包括rw, suid, dev, exec, auto, nouser,和 async。
  • 0:dump 工具通过它决定何时作备份. dump 会检查其内容,并用数字来决定是否对这个文件系统进行备份。 允许的数字是 0 和 1 。0 表示忽略, 1 则进行备份。大部分的用户是没有安装 dump 的 ,对他们而言 应设为 0
  • 2:fsck选项,fsck命令通过检测该字段来决定文件系统通过什么顺序来扫描检查,根文件系统/对应该字段的值应该为1,其他文件系统应该为2。若文件系统无需在启动时扫描检查,则设置该字段为0。

4、拷贝数据

/home 目录下的所有文件 复制/同步 到目标盘挂载的目录下(这里一定要注意加上-a,否则,复制过去文件的所有者会变成root,而且路径一定要设置正确,否则都会导致重启的时候在登陆界面无限循环,无法进入图形界面。)

sudo cp -arv /home/* /test

拷贝中,“sudo rsync -av /home/ /test” 和 “sudo cp -arv /home/* /test” 相同的效果;
sudo rsync -av /home/ /test 命令会递归复制 /home 目录及其所有子目录和文件到 /test 目录。如果 /test 目录不存在,将会创建。如果 /test 目录存在,则会将 /home 目录及其所有子目录和文件复制到 /test 目录,覆盖 /test 目录中已有的文件。

sudo cp -arv /home/ /test* 命令会将 /home 目录中的所有文件和子目录逐个复制到 /test 目录。如果 /test 目录不存在,将会创建。如果 /test 目录存在,则会将 /home 目录中的所有文件和子目录复制到 /test 目录,覆盖 /test 目录中已有的文件。

以下是两条命令的详细区别:

参数rsynccp
-a保留所有权限、所有者和时间戳信息保留所有权限、所有者和时间戳信息
-r递归复制逐个复制
-v显示详细的复制过程显示详细的复制过程

在大多数情况下,rsync 命令是更有效的复制命令。这是因为 rsync 命令会使用传输算法来减少数据传输量。如果您需要复制大量文件或目录,rsync 命令是更好的选择。
但是,如果您只需要复制少量文件或目录,cp 命令可能更快。这是因为 cp 命令不需要使用传输算法。

5、修改启动挂载文件 /etc/fstab

# 备份原文件
sudo cp -a /etc/fstab /etc/fstab.old

查看目标盘的uuid:

sudo blkid | grep /dev/sda5

编辑 /etc/fstab 文件,将上一步查找到的uuid替换文件中的uuid。

以 uuid为:37a3d47a-875c-4072-9b0a-ce665e8d60f0, 例如:

# /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/sda2 during installation
UUID=9d2858b6-3e81-4b65-ade7-7167154b24ea /               ext4    errors=remount-ro 0       1
# /boot/efi was on /dev/sda1 during installation
UUID=50D1-4C39  /boot/efi       vfat    umask=0077      0       1
# /home was on /dev/sdb during installation
## 增加这一行,将 uuid 替换为新磁盘的 uuid:
UUID=37a3d47a-875c-4072-9b0a-ce665e8d60f0 /home           ext4    defaults        0       2
# swap was on /dev/sda3 during installation
UUID=eb30e557-ee8c-4831-be5f-c7f09b9ea6ec none            swap    sw              0       0

注意:defaults ,记得加上 s

重启, /home 目录更换成功;

注意事项

成功操作后,如果磁盘空间够用,则无需其他操作直接用即可。

如果原先的磁盘已经占用很满,但是发现数据迁移后并没有释放空间,这是因为原先的数据都还在。

如果想要释放空间(删除原先的数据),则跟随以下步骤操作:

小心谨慎操作,以防数据丢失

重启之后,可以尝试在 /home 目录中新建文件,以确定是否在期望的操作空间中。

重新挂载磁盘,确定是否成功载入目录;

如果成功,则删除原先磁盘的数据;

reference

@misc{BibEntry2023Nov,
title = {{ubuntu下迁移home目录至新的分区教程详解}},
year = {2023},
month = nov,
urldate = {2023-11-13},
language = {chinese},
note = {[Online; accessed 13. Nov. 2023]},
url = {https://www.yii666.com/blog/222168.html}
}

@misc{BibEntry2023Nov,
title = {{如何在Ubuntu中挂载新硬盘{ _ \_ _}ubuntu挂载硬盘-CSDN博客}},
year = {2023},
month = nov,
urldate = {2023-11-13},
language = {chinese},
note = {[Online; accessed 13. Nov. 2023]},
url = {https://blog.csdn.net/qq_33031419/article/details/133056014}
}

@misc{BibEntry2023Nov,
title = {{Linux文件xn–ih7c/etc/fstab-CSDN博客}},
year = {2023},
month = nov,
urldate = {2023-11-13},
language = {chinese},
note = {[Online; accessed 13. Nov. 2023]},
url = {https://blog.csdn.net/weixin_45264425/article/details/126963781}
}

相关文章:

  • 一文详解oa人事系统!
  • 穿越时空的超级英雄
  • LeetCode 189.轮转数组(三种方法解决)
  • 从理论到实践:深度解读BIO、NIO、AIO的优缺点及使用场景
  • 数据结构——红黑树
  • thinkphp6 只有默认页能访问 其他404 其他模块404
  • Linux常用命令用法及实现方式有哪些?
  • 怎样正确做 Web 应用的压力测试?
  • 【2021集创赛】 RISC-V杯三等奖:基于E203 处理器的SM4算法硬件加速
  • 数据结构(C语言)实验-单链表
  • 记录:unity脚本的编写6.0
  • Vue3封装自定义指令+h()
  • 前端NaN解决方案
  • 【瑞禧分享】g-C3N4负载镍金属纳米颗粒 Ni@g-C3N4 镍金属修饰类石墨相氮化碳
  • docker部署Prometheus+Cadvisor+Grafana实现服务器监控
  • “大数据应用场景”之隔壁老王(连载四)
  • Android交互
  • Android组件 - 收藏集 - 掘金
  • css的样式优先级
  • css选择器
  • Javascript编码规范
  • Markdown 语法简单说明
  • SQLServer之索引简介
  • Vue 2.3、2.4 知识点小结
  • 产品三维模型在线预览
  • 工作手记之html2canvas使用概述
  • 简单基于spring的redis配置(单机和集群模式)
  • 前端js -- this指向总结。
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 阿里云API、SDK和CLI应用实践方案
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​什么是bug?bug的源头在哪里?
  • ​学习一下,什么是预包装食品?​
  • #define、const、typedef的差别
  • #vue3 实现前端下载excel文件模板功能
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (12)目标检测_SSD基于pytorch搭建代码
  • (14)Hive调优——合并小文件
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (三)c52学习之旅-点亮LED灯
  • (十六)Flask之蓝图
  • (五)c52学习之旅-静态数码管
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)winform之ListView
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .NET delegate 委托 、 Event 事件
  • .NET Framework与.NET Framework SDK有什么不同?
  • .Net Web项目创建比较不错的参考文章
  • .NET值类型变量“活”在哪?
  • /etc/sudoer文件配置简析
  • [22]. 括号生成
  • [4.9福建四校联考]
  • [C/C++随笔] char与unsigned char区别