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



目录

  • 前言
  • 1. 实操
    • 1.1 整个磁盘拷贝
    • 1.2 创建 home 分区
    • 1.3 修改 fstab 实现自动挂载
  • 2. 涉及到的知识点
    • 2.1 fstab
    • 2.2 dd 命令
    • 2.3 fdisk 命令
    • 2.4 lsblk 命令
  • 后记
  • 链接


前言
公司发的电脑是 128G SSD + 512G 机械硬盘,我当时直接将 Arch Linux 装在了 SSD 上,分区形式如下:
?~ lsblk -f NAME FSTYPE FSVER LABEL UUIDFSAVAIL FSUSE% MOUNTPOINTS sda ├─sda1 │swap1ee4a2a29-3f56-4f87-b905-93039bd54e66[SWAP] └─sda2 ext41.068d3f420-6e49-4e45-9bdd-a83575de198e118.1G99% /

【[LINUX]|[LINUX] Arch Linux 硬盘拷贝式装系统+新增 home 分区】整个电脑只剩下 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 文件报错,可以不管)
    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.# # /dev/nvme0n1p2 UUID=68d3f420-6e49-4e45-9bdd-a83575de198e /ext4rw,relatime 0 1# /dev/nvme0n1p1 UUID=ee4a2a29-3f56-4f87-b905-93039bd54e66 noneswapdefaults,pri=-2 0 0

  • 查看当前 /dev/sda 分区情况:
    ?~ lsblk -f NAME FSTYPE FSVER LABEL UUIDFSAVAIL FSUSE% MOUNTPOINTS sda ├─sda1 │swap1ee4a2a29-3f56-4f87-b905-93039bd54e66[SWAP] ├─sda2 │ext41.068d3f420-6e49-4e45-9bdd-a83575de198e69.1G31% / └─sda3 ext41.0b8f27505-9096-4717-84ae-eb23dd3a7cd635.9G60% /home

  • 对比上面两步的信息,我们只需要将 sda3 的挂载信息写入 fstab 中,最终 fstab 如下:
    ?/mnt cat /etc/fstab # Static information about the filesystems. # See fstab(5) for details.# # /dev/nvme0n1p2 UUID=68d3f420-6e49-4e45-9bdd-a83575de198e /ext4rw,relatime 0 1# /dev/nvme0n1p1 UUID=ee4a2a29-3f56-4f87-b905-93039bd54e66 noneswapdefaults,pri=-2 0 0UUID=b8f27505-9096-4717-84ae-eb23dd3a7cd6 /homeext4defaults 0 0

  • 删除 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 可用于查看硬盘和分区情况
?~ 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: 0xdbdddf59DeviceBootStartEndSectorsSize Id Type /dev/sda1204816779263167772168G 83 Linux /dev/sda216779264 250069679 233290416 111.2G 83 Linux /dev/sda3250071040 468862127 218791088 104.3G 83 LinuxDisk /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: 0xd863d634DeviceBoot StartEndSectorsSize Id Type /dev/sdb12048 234441647 234439600 111.8G 83 LinuxDisk /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: 0x044a6a07DeviceBoot StartEndSectorsSize Id Type /dev/sdc1*2048 31116287 31114240 14.8Gc W95 FAT32 (LBA)


2)fdisk /dev/sda 可用于创建和删除分区(该例子摘抄参考链接[3])
fdisk /dev/sdaWARNING: 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#查看分区表信息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: 0x0005210cDevice BootStartEndBlocksIdSystem /dev/sda1*12620480083Linux Partition 1 does not end on cylinder boundary. /dev/sda22613011024000083Linux /dev/sda313011497157286482Linux swap / Solaris /dev/sda414972611895283283LinuxCommand (m for help): d#删除分区 Partition number (1-4): 4#删除第四个Command (m for help): p#再次查看分区信息,/dev/sda4已被删除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: 0x0005210cDevice BootStartEndBlocksIdSystem /dev/sda1*12620480083Linux Partition 1 does not end on cylinder boundary. /dev/sda22613011024000083Linux /dev/sda313011497157286482Linux swap / SolarisCommand (m for help): n#创建新的分区 Command action eextended pprimary partition (1-4) p#创建为主分区 Selected partition 4 First cylinder (1497-3916, default 1497):#经对比,正好和上一个磁盘柱一致,默认即可 Using default value 1497 Last cylinder, +cylinders or +size{K,M,G} (1497-3916, default 3916): Using default value 3916#直接默认就可以Command (m for help): p#查看分区表信息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: 0x0005210cDevice BootStartEndBlocksIdSystem /dev/sda1*12620480083Linux Partition 1 does not end on cylinder boundary. /dev/sda22613011024000083Linux /dev/sda313011497157286482Linux swap / Solaris /dev/sda4149739161943658283LinuxCommand (m for help): wp#保存并退出,如果创建有误,直接退出不要保存即可 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等等。
?/mnt lsblk -f NAMEFSTYPE FSVER LABELUUIDFSAVAIL FSUSE% MOUNTPOINTS sda ├─sda1 swap1ee4a2a29-3f56-4f87-b905-93039bd54e66[SWAP] ├─sda2 ext41.068d3f420-6e49-4e45-9bdd-a83575de198e69.1G31% / └─sda3 ext41.0b8f27505-9096-4717-84ae-eb23dd3a7cd635.8G60% /home sdb └─sdb1 ext41.03107bb63-4029-433b-9131-5536ab2f3664 sdc └─sdc1 vfatFAT32 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]|[LINUX] Arch Linux 硬盘拷贝式装系统+新增 home 分区
文章图片

    推荐阅读