前言

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

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

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

本文介绍该操作的详细过程,涉及到:

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 文件报错,可以不管)

    1. cd /mnt
    2. sudo mkdir home
    3. sudo mount /dev/sda3 /mnt/home
  • 利用 sudo cp -ra /home/* /mnt/home 将现在的 home 下的内容拷贝到 /mnt/home 下

  • 利用下列命令,将 /dev/sda3 重新挂载到 /home

    1. sudo umount /dev/sda3
    2. cd /
    3. mv home home_bk
    4. sudo mkidr home
    5. sudo mount /dev/sda3 /home

1.3 修改 fstab 实现自动挂载

  • 查看当前的 fstab:

    1. /mnt cat /etc/fstab
    2. # Static information about the filesystems.
    3. # See fstab(5) for details.
    4. # <file system> <dir> <type> <options> <dump> <pass>
    5. # /dev/nvme0n1p2
    6. UUID=68d3f420-6e49-4e45-9bdd-a83575de198e / ext4 rw,relatime 0 1
    7. # /dev/nvme0n1p1
    8. UUID=ee4a2a29-3f56-4f87-b905-93039bd54e66 none swap defaults,pri=-2 0 0
  • 查看当前 /dev/sda 分区情况:

    1. ~ lsblk -f
    2. NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
    3. sda
    4. ├─sda1
    5. swap 1 ee4a2a29-3f56-4f87-b905-93039bd54e66 [SWAP]
    6. ├─sda2
    7. ext4 1.0 68d3f420-6e49-4e45-9bdd-a83575de198e 69.1G 31% /
    8. └─sda3
    9. ext4 1.0 b8f27505-9096-4717-84ae-eb23dd3a7cd6 35.9G 60% /home
  • 对比上面两步的信息,我们只需要将 sda3 的挂载信息写入 fstab 中,最终 fstab 如下:

    1. /mnt cat /etc/fstab
    2. # Static information about the filesystems.
    3. # See fstab(5) for details.
    4. # <file system> <dir> <type> <options> <dump> <pass>
    5. # /dev/nvme0n1p2
    6. UUID=68d3f420-6e49-4e45-9bdd-a83575de198e / ext4 rw,relatime 0 1
    7. # /dev/nvme0n1p1
    8. UUID=ee4a2a29-3f56-4f87-b905-93039bd54e66 none swap defaults,pri=-2 0 0
    9. UUID=b8f27505-9096-4717-84ae-eb23dd3a7cd6 /home ext4 defaults 0 0
  • 删除 home_bk,重启系统,系统会检查 sda3,可能会报一些 cache 文件的错误,到时候按照说明,将这些 cache 文件忽略或删除即可。

2. 涉及到的知识点

2.1 fstab

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

2.2 dd 命令

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

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

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

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

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

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

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

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

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

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

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

......

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

2.3 fdisk 命令

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

  1. ~ sudo fdisk -l
  2. [sudo] password for btfz:
  3. Disk /dev/sda: 223.57 GiB, 240057409536 bytes, 468862128 sectors
  4. Disk model: KINGSTON SV300S3
  5. Units: sectors of 1 * 512 = 512 bytes
  6. Sector size (logical/physical): 512 bytes / 512 bytes
  7. I/O size (minimum/optimal): 512 bytes / 512 bytes
  8. Disklabel type: dos
  9. Disk identifier: 0xdbdddf59
  10. Device Boot Start End Sectors Size Id Type
  11. /dev/sda1 2048 16779263 16777216 8G 83 Linux
  12. /dev/sda2 16779264 250069679 233290416 111.2G 83 Linux
  13. /dev/sda3 250071040 468862127 218791088 104.3G 83 Linux
  14. Disk /dev/sdb: 111.79 GiB, 120034123776 bytes, 234441648 sectors
  15. Disk model: KINGSTON SA400S3
  16. Units: sectors of 1 * 512 = 512 bytes
  17. Sector size (logical/physical): 512 bytes / 512 bytes
  18. I/O size (minimum/optimal): 512 bytes / 512 bytes
  19. Disklabel type: dos
  20. Disk identifier: 0xd863d634
  21. Device Boot Start End Sectors Size Id Type
  22. /dev/sdb1 2048 234441647 234439600 111.8G 83 Linux
  23. Disk /dev/sdc: 14.84 GiB, 15931539456 bytes, 31116288 sectors
  24. Disk model: Storage Device
  25. Units: sectors of 1 * 512 = 512 bytes
  26. Sector size (logical/physical): 512 bytes / 512 bytes
  27. I/O size (minimum/optimal): 512 bytes / 512 bytes
  28. Disklabel type: dos
  29. Disk identifier: 0x044a6a07
  30. Device Boot Start End Sectors Size Id Type
  31. /dev/sdc1 * 2048 31116287 31114240 14.8G c W95 FAT32 (LBA)

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

  1. fdisk /dev/sda
  2. WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
  3. switch off the mode (command 'c') and change display units to
  4. sectors (command 'u').
  5. Command (m for help): p #查看分区表信息
  6. Disk /dev/sda: 32.2 GB, 32212254720 bytes
  7. 255 heads, 63 sectors/track, 3916 cylinders
  8. Units = cylinders of 16065 * 512 = 8225280 bytes
  9. Sector size (logical/physical): 512 bytes / 512 bytes
  10. I/O size (minimum/optimal): 512 bytes / 512 bytes
  11. Disk identifier: 0x0005210c
  12. Device Boot Start End Blocks Id System
  13. /dev/sda1 * 1 26 204800 83 Linux
  14. Partition 1 does not end on cylinder boundary.
  15. /dev/sda2 26 1301 10240000 83 Linux
  16. /dev/sda3 1301 1497 1572864 82 Linux swap / Solaris
  17. /dev/sda4 1497 2611 8952832 83 Linux
  18. Command (m for help): d #删除分区
  19. Partition number (1-4): 4 #删除第四个
  20. Command (m for help): p #再次查看分区信息,/dev/sda4已被删除
  21. Disk /dev/sda: 32.2 GB, 32212254720 bytes
  22. 255 heads, 63 sectors/track, 3916 cylinders
  23. Units = cylinders of 16065 * 512 = 8225280 bytes
  24. Sector size (logical/physical): 512 bytes / 512 bytes
  25. I/O size (minimum/optimal): 512 bytes / 512 bytes
  26. Disk identifier: 0x0005210c
  27. Device Boot Start End Blocks Id System
  28. /dev/sda1 * 1 26 204800 83 Linux
  29. Partition 1 does not end on cylinder boundary.
  30. /dev/sda2 26 1301 10240000 83 Linux
  31. /dev/sda3 1301 1497 1572864 82 Linux swap / Solaris
  32. Command (m for help): n #创建新的分区
  33. Command action
  34. e extended
  35. p primary partition (1-4)
  36. p #创建为主分区
  37. Selected partition 4
  38. First cylinder (1497-3916, default 1497): #经对比,正好和上一个磁盘柱一致,默认即可
  39. Using default value 1497
  40. Last cylinder, +cylinders or +size{K,M,G} (1497-3916, default 3916):
  41. Using default value 3916 #直接默认就可以
  42. Command (m for help): p #查看分区表信息
  43. Disk /dev/sda: 32.2 GB, 32212254720 bytes
  44. 255 heads, 63 sectors/track, 3916 cylinders
  45. Units = cylinders of 16065 * 512 = 8225280 bytes
  46. Sector size (logical/physical): 512 bytes / 512 bytes
  47. I/O size (minimum/optimal): 512 bytes / 512 bytes
  48. Disk identifier: 0x0005210c
  49. Device Boot Start End Blocks Id System
  50. /dev/sda1 * 1 26 204800 83 Linux
  51. Partition 1 does not end on cylinder boundary.
  52. /dev/sda2 26 1301 10240000 83 Linux
  53. /dev/sda3 1301 1497 1572864 82 Linux swap / Solaris
  54. /dev/sda4 1497 3916 19436582 83 Linux
  55. Command (m for help): wp #保存并退出,如果创建有误,直接退出不要保存即可
  56. The partition table has been altered!
  57. Calling ioctl() to re-read partition table.
  58. WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
  59. The kernel still uses the old table. The new table will be used at
  60. the next reboot or after you run partprobe(8) or kpartx(8)
  61. Syncing disks.

2.4 lsblk 命令

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

  1. /mnt lsblk -f
  2. NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
  3. sda
  4. ├─sda1 swap 1 ee4a2a29-3f56-4f87-b905-93039bd54e66 [SWAP]
  5. ├─sda2 ext4 1.0 68d3f420-6e49-4e45-9bdd-a83575de198e 69.1G 31% /
  6. └─sda3 ext4 1.0 b8f27505-9096-4717-84ae-eb23dd3a7cd6 35.8G 60% /home
  7. sdb
  8. └─sdb1 ext4 1.0 3107bb63-4029-433b-9131-5536ab2f3664
  9. sdc
  10. └─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 分区的更多相关文章

  1. Linux 学习笔记 1 使用最小的系统,从分区安装系统开始

    我们常用的linux系统在安装过程中大多都省略了对系统进行分区的操作,以至于后期,不了解什么是分区以及分区当中最基本的一些概念, 我们不说最细的知识,只求了解这个过程,那直接步入正题,开始第一节的学习 ...

  2. [linux] ARCH LINUX 常见问题及实用工具汇总

    1.办公 screen-recorder 1)深度linux桌面录制软件(不支持录音),操作简单,可以保存mp4和gif格式 2)命令安装:sudo pacman -S deepin-screen-r ...

  3. 在VMWare上安装Arch Linux

    1.为什么选择Arch Linux Arch Linux 是通用 x86-64 GNU/Linux 发行版.Arch采用滚动升级模式,尽全力提供最新的稳定版软件.初始安装的Arch只是一个基本系统,随 ...

  4. Arch linux操作系统安装教程

    一.Arch linux Arch Linux是一款基于x86-64架构的Linux发行版.系统主要由自由和开源软件组成,支持社区参与.系统设计以KISS原则(保持简单和愚蠢)为总体指导原则,注重代码 ...

  5. win7系统自带分区工具,能分出逻辑分区

    先把硬盘里除了你装系统的主分区以外的分区全删除运行CMD输入 DISKPART然后输入list disk,找到你要分的盘,假如是要分第1个硬盘的就输入:select disk 0 这样就选择了第一个硬 ...

  6. Arch Linux 硬盘引导-联网安装

    Arch Linux 硬盘引导-联网安装 ============https://www.archlinux.org/https://wiki.archlinux.org/https://wiki.a ...

  7. 在 VirtualBox 虚拟机中安装 Arch Linux 系统指南

    How to install Arch Linux on VirtualBox 在 VirtualBox 虚拟机中安装 Arch Linux 系统指南 本文导航 1.Arch Linux 软件仓库2. ...

  8. windows10+arch linux双系统 uefi启动

    安装前的准备Archlinux 安装ISO镜像,下载:http://mirrors.163.com/archlinux/iso/2013.05.01/U盘一个,最好1G以上,格式化成FAT32.把下载 ...

  9. Arch Linux 系统迁移

    镜像下载.域名解析.时间同步请点击 阿里巴巴开源镜像站 备份 Arch Linux 系统 安装 pigz 使用 pigz 多线程压缩比使用 tar 单线程压缩速度明显提升多倍 sudo pacman ...

随机推荐

  1. kubeadm 如何将节点加入集群

    kubeadm join 使用 token 过期之后(24小时过期),如何加入集群 一.重启生成新token # 创建新token kubeadm token create # 查看是否存在有效的 t ...

  2. 牛客练习赛71E-神奇的迷宫【点分治,NTT】

    正题 题目链接:https://ac.nowcoder.com/acm/contest/7745/E 题目大意 给出\(n\)个点的一棵树,每个点有一个选择权重\(a_i\)(有\(\frac{a_i ...

  3. SVN基本配置--创建版本库(图文并茂)

    SVN基本配置简 上一篇介绍了VisualSVN Server和TortoiseSVN的下载,安装,汉化.这篇介绍一下如何使用VisualSVN Server建立版本库,以及TortoiseSVN的使 ...

  4. 小白自制Linux开发板 二. u-boot移植

    上一篇:小白自制Linux开发板 一. 瞎抄原理图与乱画PCB  中我们做了一个小型而没用的开发板,用的是Licheepi Nano的镜像,那从本篇开始我们开始自己构建它的灵魂吧. 我们都知道,PC在 ...

  5. 题解 2020.10.24 考试 T4 模板

    题目传送门 题目大意 有一个 \(n\) 个点组成的树,有 \(m\) 次操作,每次将 \(1\to x\) 的路径上每个点都加入一个颜色为 \(c\) 的小球.但是每个点都有大小限制,即小球个数超过 ...

  6. 题解 「2017 山东一轮集训 Day5」苹果树

    题目传送门 题目大意 给出一个 \(n\) 个点的图,每个点都有一个权值 \(f_i\) ,如果 \(f_i=-1\) 表示 \(i\) 这个点是坏的.定义一个点是有用的当且仅当它不是坏的,并且它连的 ...

  7. k8s学习笔记(1)- 简单部署springboot应用

    前言:k8s全称kubernetes,k8s是为容器服务而生的一个可移植容器的编排管理工具,越来越多的公司正在拥抱k8s,并且当前k8s已经主导了云业务流程,关于更多的k8s知识,可自行学习 1.k8 ...

  8. 全网详细JAVA知识点干货学习路线目录,值得收藏学习!

    1.Java简介及开发环境配置 2.Java中的注释&关键字&常量&变量&标识符 3.Java中的基本数据类型及其类型转换 4.Java中的运算符及表达式 5.Java ...

  9. 将DataFrame赋值为可变变量在spark中多次赋值后运行速度减慢的问题

    该问题先标记上,之后有空了研究原因. 在var dataframe后将dataframe作为参数输入某方法,将结果重新赋予该dataframe,会导致spark运行显著减慢速度.暂时不知道原因,之后研 ...

  10. TypeError: module() takes at most 2 arguments (3 given)

    1. 错误提示 2. 代码 class Parent: """定义父类""" def __init__(self): print(" ...