[LINUX] Arch Linux 硬盘拷贝式装系统+新增 home 分区

前言

公司发的电脑是 128G SSD + 512G 机械硬盘,我当时直接将 Arch Linux 装在了 SSD 上,分区形式如下:

➜  ~ lsblk -f
NAME FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
sda
├─sda1
│    swap   1           ee4a2a29-3f56-4f87-b905-93039bd54e66                [SWAP]
└─sda2
     ext4   1.0         68d3f420-6e49-4e45-9bdd-a83575de198e   118.1G   99% /

整个电脑只剩下 8G 左右的 SSD,经常用一段时间就得想办法清一清,实在忍受不了了,决定搞一个 256G 的 SSD,将老的换掉!!!

本文介绍了此次行动的详细流程,涉及:

[En]

This article introduces the detailed process of this operation, which involves:

1)硬盘整个拷贝技术
2)新建 home 分区技术
3)修改 fstab 实现自动挂载

1. 实操

1.1 整个磁盘拷贝

  • 将 SSD 插入原电脑,被识别为 /dev/sdb
  • 利用 sudo fdisk /dev/sdb 将其现有分区全部删除
  • 利用 sudo mkfs.ext4 /dev/sdb 将其格式化
  • 利用 sudo dd if=/dev/nvme0n1 of=/dev/sdb 将原硬盘拷贝到新硬盘(会2个小时左右,时间较长)

1.2 创建 home 分区

  • 此时将新 SSD 安装到主板上,配置电脑从该新硬盘启动,会发现我们已经复制了一个一模一样的系统(假设新硬盘被识别为 /dev/sda
  • 利用 sudo fdisk /dev/sda 将新硬盘剩下的 100G 左右的空间创建一个主分区: /dev/sda3
  • 利用下列命令,将 /dev/sda3 挂载到 /mnt/home 下(拷贝过程中有些 cache 文件报错,可以不管)
cd /mnt
sudo mkdir home
sudo mount /dev/sda3 /mnt/home
  • 利用 sudo cp -ra /home/* /mnt/home 将现在的 home 下的内容拷贝到 /mnt/home 下
  • 利用下列命令,将 /dev/sda3 重新挂载到 /home
sudo umount /dev/sda3
cd /
mv home home_bk
sudo mkidr home
sudo mount /dev/sda3 /home

1.3 修改 fstab 实现自动挂载

  • 查看当前的 fstab:
➜  /mnt cat /etc/fstab
Static information about the filesystems.

See fstab(5) for details.

<file system> <dir> <type> <options> <dump> <pass>
/dev/nvme0n1p2
UUID=68d3f420-6e49-4e45-9bdd-a83575de198e   /           ext4        rw,relatime 0 1

/dev/nvme0n1p1
UUID=ee4a2a29-3f56-4f87-b905-93039bd54e66   none        swap        defaults,pri=-2 0 0
</pass></dump></options></type></dir></file>
  • 查看当前 /dev/sda 分区情况:
&#x279C;  ~ lsblk -f
NAME FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
sda
&#x251C;&#x2500;sda1
&#x2502;    swap   1           ee4a2a29-3f56-4f87-b905-93039bd54e66                [SWAP]
&#x251C;&#x2500;sda2
&#x2502;    ext4   1.0         68d3f420-6e49-4e45-9bdd-a83575de198e   69.1G    31% /
&#x2514;&#x2500;sda3
     ext4   1.0         b8f27505-9096-4717-84ae-eb23dd3a7cd6   35.9G    60% /home
  • 对比上面两步的信息,我们只需要将 sda3 的挂载信息写入 fstab 中,最终 fstab 如下:
&#x279C;  /mnt cat /etc/fstab
Static information about the filesystems.

See fstab(5) for details.

<file system> <dir> <type> <options> <dump> <pass>
/dev/nvme0n1p2
UUID=68d3f420-6e49-4e45-9bdd-a83575de198e   /           ext4        rw,relatime 0 1

/dev/nvme0n1p1
UUID=ee4a2a29-3f56-4f87-b905-93039bd54e66   none        swap        defaults,pri=-2 0 0

UUID=b8f27505-9096-4717-84ae-eb23dd3a7cd6   /home       ext4        defaults    0 0
</pass></dump></options></type></dir></file>
  • 删除 home_bk,重启系统,系统会检查 sda3,可能会报一些 cache 文件的错误,到时候按照说明,将这些 cache 文件忽略或删除即可。

2. 涉及到的知识点

2.1 fstab

fstab 文件可用于定义磁盘分区,各种其他块设备或远程文件系统应如何装入文件系统。系统启动会根据该文件调用 mount 命令,将相应分区挂载到合适地方。如何读懂修改该文件,只需要看参考链接[1]即可获得详细信息。

2.2 dd 命令

dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。常用来硬盘/分区拷贝、备份,例如:

1.将本地的/dev/hdb整盘备份到/dev/hdd

dd if=/dev/hdb of=/dev/hdd

2.将/dev/hdb全盘数据备份到指定路径的image文件

dd if=/dev/hdb of=/root/image

3.将备份文件恢复到指定盘

dd if=/root/image of=/dev/hdb

4.备份/dev/hdb全盘数据,并利用gzip工具进行压缩,保存到指定路径

dd if=/dev/hdb | gzip > /root/image.gz

5.将压缩的备份文件恢复到指定盘

gzip -dc /root/image.gz | dd of=/dev/hdb

……

更多,请看参考链接[2]

2.3 fdisk 命令

1)fdisk -l 可用于查看硬盘和分区情况

&#x279C;  ~ sudo fdisk -l
[sudo] password for btfz:
Disk /dev/sda: 223.57 GiB, 240057409536 bytes, 468862128 sectors
Disk model: KINGSTON SV300S3
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xdbdddf59

Device     Boot     Start       End   Sectors   Size Id Type
/dev/sda1            2048  16779263  16777216     8G 83 Linux
/dev/sda2        16779264 250069679 233290416 111.2G 83 Linux
/dev/sda3       250071040 468862127 218791088 104.3G 83 Linux

Disk /dev/sdb: 111.79 GiB, 120034123776 bytes, 234441648 sectors
Disk model: KINGSTON SA400S3
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xd863d634

Device     Boot Start       End   Sectors   Size Id Type
/dev/sdb1        2048 234441647 234439600 111.8G 83 Linux

Disk /dev/sdc: 14.84 GiB, 15931539456 bytes, 31116288 sectors
Disk model: Storage Device
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x044a6a07

Device     Boot Start      End  Sectors  Size Id Type
/dev/sdc1  *     2048 31116287 31114240 14.8G  c W95 FAT32 (LBA)

2)fdisk /dev/sda 可用于创建和删除分区(该例子摘抄参考链接[3]

fdisk /dev/sda

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): p        #&#x67E5;&#x770B;&#x5206;&#x533A;&#x8868;&#x4FE1;&#x606F;

Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0005210c

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.

/dev/sda2              26        1301    10240000   83  Linux
/dev/sda3            1301        1497     1572864   82  Linux swap / Solaris
/dev/sda4            1497        2611     8952832   83  Linux

Command (m for help): d           #&#x5220;&#x9664;&#x5206;&#x533A;
Partition number (1-4): 4         #&#x5220;&#x9664;&#x7B2C;&#x56DB;&#x4E2A;

Command (m for help): p       #&#x518D;&#x6B21;&#x67E5;&#x770B;&#x5206;&#x533A;&#x4FE1;&#x606F;&#xFF0C;/dev/sda4&#x5DF2;&#x88AB;&#x5220;&#x9664;

Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0005210c

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.

/dev/sda2              26        1301    10240000   83  Linux
/dev/sda3            1301        1497     1572864   82  Linux swap / Solaris

Command (m for help): n      #&#x521B;&#x5EFA;&#x65B0;&#x7684;&#x5206;&#x533A;
Command action
   e   extended
   p   primary partition (1-4)
p             #&#x521B;&#x5EFA;&#x4E3A;&#x4E3B;&#x5206;&#x533A;
Selected partition 4
First cylinder (1497-3916, default 1497):          #&#x7ECF;&#x5BF9;&#x6BD4;&#xFF0C;&#x6B63;&#x597D;&#x548C;&#x4E0A;&#x4E00;&#x4E2A;&#x78C1;&#x76D8;&#x67F1;&#x4E00;&#x81F4;&#xFF0C;&#x9ED8;&#x8BA4;&#x5373;&#x53EF;
Using default value 1497
Last cylinder, +cylinders or +size{K,M,G} (1497-3916, default 3916):
Using default value 3916              #&#x76F4;&#x63A5;&#x9ED8;&#x8BA4;&#x5C31;&#x53EF;&#x4EE5;

Command (m for help): p               #&#x67E5;&#x770B;&#x5206;&#x533A;&#x8868;&#x4FE1;&#x606F;

Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0005210c

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.

/dev/sda2              26        1301    10240000   83  Linux
/dev/sda3            1301        1497     1572864   82  Linux swap / Solaris
/dev/sda4            1497        3916    19436582   83  Linux

Command (m for help): wp       #&#x4FDD;&#x5B58;&#x5E76;&#x9000;&#x51FA;&#xFF0C;&#x5982;&#x679C;&#x521B;&#x5EFA;&#x6709;&#x8BEF;&#xFF0C;&#x76F4;&#x63A5;&#x9000;&#x51FA;&#x4E0D;&#x8981;&#x4FDD;&#x5B58;&#x5373;&#x53EF;
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.

The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

2.4 lsblk 命令

lsblk(列出块设备)命令用于列出所有可用块设备的信息,但是,它不会列出RAM盘的信息。块设备有硬盘,闪存盘,CD-ROM等等。

&#x279C;  /mnt lsblk -f
NAME   FSTYPE FSVER LABEL       UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
sda
&#x251C;&#x2500;sda1 swap   1                 ee4a2a29-3f56-4f87-b905-93039bd54e66                [SWAP]
&#x251C;&#x2500;sda2 ext4   1.0               68d3f420-6e49-4e45-9bdd-a83575de198e   69.1G    31% /
&#x2514;&#x2500;sda3 ext4   1.0               b8f27505-9096-4717-84ae-eb23dd3a7cd6   35.8G    60% /home
sdb
&#x2514;&#x2500;sdb1 ext4   1.0               3107bb63-4029-433b-9131-5536ab2f3664
sdc
&#x2514;&#x2500;sdc1 vfat   FAT32 ARCH_202110 E01F-1B25

后记

这篇文章记录了,如何拷贝并扩容一个 Arch Linux 系统,楼主这样操作后终于不用再担心硬盘资源不够的问题了~,希望其他人遇到相同问题时可以帮助快速解决问题。

链接

[1]. fstab arch doc
[2]. linux命令总结dd命令详解-琴酒网络
[3]. Linux下使用fdisk扩展分区容量
[4]. 1、virtualbox中安装archlinux+i3桌面,并做简单美化
[5]. ARCH LINUX 常见问题及实用工具汇总

: 陆续更新中…

[LINUX] Arch Linux 硬盘拷贝式装系统+新增 home 分区

Original: https://www.cnblogs.com/zjutlitao/p/15534172.html
Author: beautifulzzzz
Title: [LINUX] Arch Linux 硬盘拷贝式装系统+新增 home 分区

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/524385/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Redis

    Redis原创笑笑师弟 最后发布于2018-12-21 14:17:59 阅读数 1780 收藏展开目录 redis简介 redis功能 redis学习步骤 windows系统下的…

    Linux 2023年5月28日
    0109
  • archLinux 配置用户

    archlinux 启动之后只有默认的root用户,首先介绍下系统启动到登录需要的步骤 1.系统通过systemd 以pid为1初始化系统,启动系统用户和系统必要的服务,(这一步目…

    Linux 2023年6月13日
    086
  • 55分钟学会正则表达式

    什么是正则正则表达式是一种用来描述一定数量文本的模式,用来匹配相同规范样式的文本。在JavaScript中用RegExp对象表示正则表达式( 即Regular Eexpressio…

    Linux 2023年6月13日
    097
  • 课间游戏志:斗荧光笔与扒撸咔嚓

    课间游戏志:斗荧光笔与扒撸咔嚓 写这篇博客,主要是想记录两个课间游戏,一个是我于小学四年级时发明的斗荧光笔,一个是初中时班上几个变态发明的扒撸咔嚓,自从这两个游戏被发明以后,我们班…

    Linux 2023年6月6日
    0108
  • Redis之延迟监控

    *参考官方文档 *启用 redis 延迟监控 CONFIG SET latency-monitor-threshold 100 单位:毫秒,100表示一百毫秒。如果将 latenc…

    Linux 2023年5月28日
    0101
  • 网络通信知识地图

    知识地图是一种知识导航系统,并显示不同的知识存储之间重要的动态联系。本篇主要就是从更高的视角将之前的文章的结构思路展现出来。文章结构的思路实际上也是达到架构师程度要掌握的网络通信知…

    Linux 2023年6月14日
    0120
  • 运维开发之路:带你解剖html列表,一个看似简单而又不简单的知识点。

    HTML支持有序、无序和自定义列表,本篇笔者对这几个知识点进行剖析,跟紧步伐,我们一起出发吧! 无序列表 无序列表以ul标签开始,每个列表项都以li标签开始,无序列表是一个项目的列…

    Linux 2023年6月7日
    0113
  • 虚拟机网络地址配置你不知道的事儿-服务器的种类

    想必大家在初学Linux过程中,应该都是跟我一样白嫖一台虚拟机进行使用把,但是在大家白嫖的同时知不知道我们公司内是使用的什么样的服务器呢?公司肯定不会跟我们一样在自己电脑进行安装虚…

    Linux 2023年5月27日
    0102
  • TCP/IP方法安装打印机

    在计算机安装打印机驱动和添加打印机 (TCP/IP 方法 ) 一:打印机的型号和驱动。 1.1 :如何知道自己的打印机是什么品牌和型号?: 通过观察打印机表面的logo 或者其他文…

    Linux 2023年6月13日
    0126
  • Ubuntu安装盘的制作

    准备工作 Ubuntu系统镜像 win32diskimager U盘(4G以上),对重要文件提前备份 制作 下载系统镜像 进入官网 我们下载的版本是18.04,不是20.04 在页…

    Linux 2023年6月14日
    0110
  • Python函数的必选参数、默认参数、可变参数、关键字参数和命名关键字参数

    必选参数 def function(args_name): print (args_name) function("参数调用") ~$ 参数调用 跟在函数名口号…

    Linux 2023年6月7日
    078
  • shell多线程运行程序

    #!/bin/bash function my_cmd(){ sleep 1 } date tmp_fifofile="/tmp/$$.fifo" mkfifo…

    Linux 2023年6月6日
    0118
  • 你的团队工作量饱和吗?

    参与软件开发的相关人员,虽然称为工程技术人员,但本质上其实就是手艺人。手艺嘛肯定是一技之长,里面多少有些门道,外行人做不了, 也很难完全搞清楚其中的门道,合作过程中就怕被坑上当 :…

    Linux 2023年6月13日
    092
  • mysql存储中文乱码

    表现 前端页面,封装到html里的中文可以显示,和后台相关的中文显示都是 ??? 。查看network请求,传参正常。 查看mysql编码,是utf8。再看连接数据库的JDBC设置…

    Linux 2023年6月8日
    091
  • numpy.pad

    浅谈pad用法 numpy.pad(array, pad_width, mode=’constant’, **kwargs) 参数 array 需要进行填充的矩阵 pad_widt…

    Linux 2023年6月7日
    0114
  • 位运算(一)

    位运算的一般应用 功能 例子 运算 去掉最后一位 1110101->111010 x>>1 在最后加0 1110101->11101010 x< 通过…

    Linux 2023年6月8日
    0145
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球