Linux加装硬盘

2022-10-30 打开电脑提示home分区空间马上用尽,但是此电脑是256G固态硬盘+1T机械硬盘的,于是想计划将home挂载到空间较大的机械硬盘,本文记录这个过程。

规划好新的硬盘

在增加新硬盘时,先将新硬盘安装好,同时进行分区和格式化等操作,而我的电脑是双硬盘,所以直接操作即可。对于Linux系统,当前一般流行ext4格式,所以直接格式化准备好就行。比如我的硬盘规划如下:

1
2
3
4
5
6
7
8
9
10
11
12
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 931.5G 0 disk
├─sda1 8:1 0 831.4G 0 part /home
└─sda2 8:2 0 100.1G 0 part
sdb 8:16 0 238.5G 0 disk
├─sdb1 8:17 0 499M 0 part
├─sdb2 8:18 0 100M 0 part /boot/efi
├─sdb3 8:19 0 16M 0 part
├─sdb4 8:20 0 100G 0 part
├─sdb5 8:21 0 136.9G 0 part /
└─sdb6 8:22 0 1G 0 part [SWAP]
sr0 11:0 1 1024M 0 rom

上面是我设置完成后的状态,其中/home 之前安装系统时我单独设置了分区,而后来挂载机械硬盘后,我将原来的分区合并到了现在的根分区下,也就是现在的/dev/sdb5。而之前的机械硬盘设置也不是很合理,工作时发现windows我几乎很少启动,所以之前分配的空间太大了,于是在操作前先使用U盘启动系统到Archlinux,再使用分区工具GParted进行无损分区,这点大可放心,启动程序后你就会操作了。但是我提醒大家注意一点,分区是是对齐到4k或柱面等的,所以手动输入的空间一般不能保证全部空间都利用起来,这时候需要你手动输入一个大体值,然后再调整+-使空间得到全部利用。

向新硬盘写入原来home分区数据

1
2
3
sudo mkdir /mnt/home
sudo mount /dev/sda1 /mnt/home
sudo cp -a /home/* /mnt/home/
  1. cp -a : 递归复制,复制的数据会保留原有数据的时间戳等信息(具体:时间戳+所有权+复制连结文件属性而非档案本身)

  2. cp -r : 递归复制,复制的数据会使用新的时间戳等信息

由于我们的操作是待新硬盘挂载后和之前的情况一样,所以需要使用-a 选项,复制原来home中的所有文件及其属性。同时由于原来home中的文件较多,所以这个复制过程需要些时间,请耐心等待即可。

查看硬盘UUID序列号

UUID序列号是硬盘的唯一编号,它告诉系统在启动时挂载哪一个硬盘,这里不应当使用硬盘名称,因为有时候硬盘的名字是会发生变更的,而这个UUID是不会变的。查看UUID一共有三种方法,如下

使用命令sudo blkid获取UUID

1
2
3
4
5
6
7
8
/dev/sdb4: BLOCK_SIZE="512" UUID="42AC941EAC940F13" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="308b3a1a-ee27-4022-a862-5a72d303e7f3"
/dev/sdb2: UUID="AAAB-E291" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="0a77ba7c-e364-4da9-add2-c5e500bf1c1b"
/dev/sdb5: UUID="59063614-55b8-4075-9e43-27a83f0a556b" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="e5d5cd4b-9cac-3a47-8de5-9220ee2b6362"
/dev/sdb3: PARTLABEL="Microsoft reserved partition" PARTUUID="d5c042f5-f557-496d-b5ff-ab75a4f0b652"
/dev/sdb1: LABEL="M-fM-^AM-\"M-eM-$M-^M" BLOCK_SIZE="512" UUID="480CA8670CA851AC" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="4cfeba65-1d66-403f-be55-e458f17dd9de"
/dev/sdb6: UUID="9c8f9d48-e16c-45a7-8fb4-52584973fd9e" TYPE="swap" PARTUUID="161069e4-62be-485d-9113-e46671f86f1b"
/dev/sda2: LABEL="win-D" BLOCK_SIZE="512" UUID="2C0A1DDB0A1DA33E" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="1a0b343e-3e59-45bc-9c56-38e88bd6912c"
/dev/sda1: UUID="3e94476e-727c-4f5d-9a3b-af276a1e3b9a" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="f4fd1e2e-5e18-4232-92d9-69d926244608"

使用命令sudo lsblk -f获取UUID

1
2
3
4
5
6
7
8
9
10
11
12
NAME   FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
sda
├─sda1 ext4 1.0 3e94476e-727c-4f5d-9a3b-af276a1e3b9a 728.3G 6% /home
└─sda2 ntfs win-D 2C0A1DDB0A1DA33E
sdb
├─sdb1 ntfs 恢复 480CA8670CA851AC
├─sdb2 vfat FAT32 AAAB-E291 68.6M 29% /boot/efi
├─sdb3
├─sdb4 ntfs 42AC941EAC940F13
├─sdb5 ext4 1.0 59063614-55b8-4075-9e43-27a83f0a556b 105.9G 16% /
└─sdb6 swap 1 9c8f9d48-e16c-45a7-8fb4-52584973fd9e [SWAP]
sr0

使用命令sudo ls -l /dev/disk/by-uuid 获取UUID

1
2
3
4
5
6
7
8
总计 0
lrwxrwxrwx 1 root root 10 10月30日 15:27 2C0A1DDB0A1DA33E -> ../../sda2
lrwxrwxrwx 1 root root 10 10月30日 15:27 3e94476e-727c-4f5d-9a3b-af276a1e3b9a -> ../../sda1
lrwxrwxrwx 1 root root 10 10月30日 15:27 42AC941EAC940F13 -> ../../sdb4
lrwxrwxrwx 1 root root 10 10月30日 15:27 480CA8670CA851AC -> ../../sdb1
lrwxrwxrwx 1 root root 10 10月30日 15:27 59063614-55b8-4075-9e43-27a83f0a556b -> ../../sdb5
lrwxrwxrwx 1 root root 10 10月30日 15:27 9c8f9d48-e16c-45a7-8fb4-52584973fd9e -> ../../sdb6
lrwxrwxrwx 1 root root 10 10月30日 15:27 AAAB-E291 -> ../../sdb2

设置开机自动挂载新硬盘

这里需要操作一步简单的操作,即sudo nvim /etc/fstab/home前的UUID更换为上一小节查询到的相应UUID即可,我的系统设置如下

1
2
3
4
5
6
7
8
9
10
11
12
# /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>
UUID=AAAB-E291 /boot/efi vfat umask=0077 0 2
UUID=59063614-55b8-4075-9e43-27a83f0a556b / ext4 defaults,noatime 0 1
#UUID=4e88a851-1505-4390-8f4f-d343445bfd89 /home ext4 defaults,noatime 0 2
UUID=3e94476e-727c-4f5d-9a3b-af276a1e3b9a /home ext4 defaults,noatime 0 2
tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0

我在原来的设置中,将原来的/home一行注释掉,然后重新设置了新的硬盘UUID即上面的第11行是新的硬盘。

总结

通过今天的操作,发现更换home分区其实并不难,而且还挺容易。所以对于之前按装系统流程就有了新的思考,如果你的电脑只有一个硬盘,那装双系统需要合理规划一下分区然后按照之前的流程装就可以了,比如我的ThinkPad t490 。但是,如果你我现在的办公电脑,它只有256G的固态硬盘,还要考虑到不可避免的windows的使用,不得不划分出一块给windows,而且windows占据的空间还不能太小。这样留给Linux的空间就不会太大了,如果再分区home就更小了,但是此电脑是双硬盘,因此在装机时不必划分home分区,而除根分区外只分出/boot/efi/linux-swap即可,待安装完系统,按照此处的方法将机械硬盘挂载到/home即可。