2021年8月

{music id="1344897943" color="#a9289f" autoplay="autoplay"/}

Linux系统的逻辑卷支持类似window的多盘动态合并(LVM: :@(长草) ),也提供了灵活的硬盘挂载功能,使用mount可以把整个硬盘或者硬盘内某个分区挂载在指定linux目录下,扩大该目录的容量。
但是shafish之前安装时没有使用lvm,当时还不知道这东西(LVM: :@(小怒) ),所以本文介绍的挂载点扩容操作是指:把系统中磁盘使用率高的挂载点进行扩容,而不是在挂载点下再挂一个新的分区。这方面接触少的童鞋可能不是很清楚啥意思,那就先全文浏览一遍?走起 :@(鼓掌)

一、分区进行ext4格式化

对新分区进行格式化

# 定位需要格式化的分区,这里是上一篇文章新分配的nvme0n1p4(50G)
>lsblk
nvme0n1     259:0    0 476.9G  0 disk 
├─nvme0n1p1 259:1    0   260M  0 part /boot/efi
├─nvme0n1p2 259:2    0    16M  0 part 
├─nvme0n1p3 259:3    0 370.4G  0 part 
├─nvme0n1p4 259:4    0    50G  0 part 
├─nvme0n1p5 259:5    0  55.3G  0 part /
└─nvme0n1p6 259:6    0  1000M  0 part
# ext4格式化
>mkfs.ext4 /dev/nvme0n1p4

二、查找磁盘占用高的挂载点

>sudo du --max-depth=1 -h /
16K    /mnt
1.9M    /run
26M    /root
0    /proc
16K    /lost+found
31G    /home
2.3G    /opt
77M    /tmp
8.9G    /usr
14M    /etc
0    /dev
0    /sys
136M    /boot
2.4M    /data
12G    /var
16K    /srv
54G    /
```
毫无疑问,要扩容的挂载点是`/home`(还是建议系统安装前分配个大点的分区 :@(吐血倒地) )

## 三、替换大法进行扩容
linux系统下一切都是文件,我们只需要把挂载点`/home`下的所有文件复制到新分区,然后释放挂载点容量,最后把新分区重新挂到`/home`下就ok了。 :@(献花) 

- 1.把新分区挂载到临时挂载点
```shell
sudo mkdir /mnt/home
sudo mount /dev/nvme0n1p4 /mnt/home
```

- 2.切换用户(只保留root)
```shell
init 1
```

- 3.文件复制
```shell
# 把系统/home下的所有文件都复制到新分区中
cp -av /home/* /mnt/home
```

- 4.删除原挂载点
```shell
sudo rm -rf /home
```

- 5.挂载新分区
```shell
sudo mkdir /home
sudo umount /mnt/home
sudo mount /dev/nvme0n1p4 /home
```

- 6.设置开机固定挂载
```shell
# 查看新分区uuid
>sudo blkid /dev/nvme0n1p4
/dev/nvme0n1p4: UUID="0b5b7f34-521a-ae44-a02b-9e234f5c0129" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="Basic data partition" PARTUUID="32de16c7-01b3-11ec-8713-5c3a45739ea4"
>sudo vim /etc/fstab
# 添加下面一行内容,uuid是blkid命令得到的UUID值,表示该分区在系统启动时自动挂载到/home下
UUID=0b5b7f34-521a-ae44-a02b-9e234f5c0129  /home           ext4    defaults,noatime 0 2
```

- 7.重启:`reboot`等待系统重启

- 8.检查
 ![check](https://cdn.shafish.cn/blog_photo/resize.png) 
 可以看到`/home`已经挂载上新分区使用了,`/dev/nvme0n1p5`根目录也多出了原本`/home`占用的31G容量,nice。 :@(鼓掌) 

- 9.修改i3bar显示
`sudo vim /etc/i3status.conf`
```shell
...
order += "disk /"
order += "disk /home"
...
disk "/" {
        # format = " hdd %avail "
        #format = " ⛁ %avail "
        format = "/ %avail"
}

disk "/home" {
    format = "/home %avail"
}
...
```
 ![show](https://cdn.shafish.cn/blog_photo/echo.png) 

 完美收工。 :@(赞一个) 
 

{music id="1448421768" color="#6a267d" autoplay="autoplay"/}

电脑上安装了window和manjaro系统,当初想着linux系统不用分配太多存储,就随手分配了55G安装了manjaro i3wm :@(内伤) ,我想,当初应该是脑子不正常勒,idea、vscode等各种软件还有git项目,现在50G用剩2.7G :@(抠鼻) 。想着从window C盘再分点出来,嗯,就有现在你看到的这篇随笔 :@(无奈)
图示

一、window系统中分配50G空闲分区

直接进入window存储管理右键创建空闲分区,或者下载个分区助手操作。(略过)

二、产生grub引导错误原因

创建分区后进行ext4格式化,导致新建分区对应挂载点(或者叫盘符?)替换了原来manjaro系统的挂载点。下图示:
lsblk

原本挂载点nvme0n1p4是指向manjaro系统得,现在指向了新创建的分区(50G那个);nvme0n1p5指向原来的manjaro系统(55.3G那个)。(从C盘切下来的空闲分区是紧挨C盘后面得er,想了想,盘符错乱好像也挺正常 :@(看不见) )

盘符错乱就导致了使用manjaro做开机引导的grub程序在原来的挂载点中找不到系统引导入口,所以开机后直接进入grub rescue救援模式,需要宁手动选择系统所在分区。来吧 ヾ(´・ ・`。)ノ

三、grub引导修复

1.确定系统启动挂载点/分区

进入grub模式后输入ls显示所有分区,ls 分区显示指定分区内容:

grub rescue>ls
...(hd0,nvme0n1p4) (hd0,nvme0n1p5)...
grub rescue>ls (hd0,nvme0n1p4)/
...unknown filesystem...
grub rescue>ls (hd0,nvme0n1p5)/
home etc usr ...

如果显示系统根目录内容,就说这个分区就是你原来的系统分区。这里的系统分区是(hd0,nvme0n1p5)

2.normal启动

grub rescue>set root=(hd0,nvme0n1p5)
grub rescue>set prefix=(hd0,nvme0n1p5)/boot/grub
grub rescue>insmod normal
grub rescue>normal

ok,此时你就进入原系统的开机引导界面了,选择manjaro进入系统,进行grub的引导修复

3.修复

# 打开终端
sudo update-grub
sudo grub-install /dev/nvme0n1p5

ok,搞定