%%
# 纲要
> 主干纲要、Hint/线索/路标
# Q&A
#### 已明确
#### 待明确
> 当下仍存有的疑惑
**❓<font color="#c0504d"> 有什么问题?</font>**
# Buffer
## 闪念
> sudden idea
## 候选资料
> Read it later
%%
# 文件系统挂载相关
#### 查看所有已挂载的文件系统
- `$ mount`:查看所有已挂载的文件系统
- `-t type`: 查看已挂载的、指定类型的文件系统
```shell
# 示例:查看已挂载的ext4文件系统
mount -t ext4
# 将显示: 设备文件名、挂载点、文件系统类型、已挂载设备的访问状态
```
![[_attachment/02-开发笔记/11-Linux/Linux 命令行/Linux-文件系统与磁盘管理相关命令.assets/IMG-Linux-文件系统与磁盘管理相关命令-1F557B1CF310543A53F60B1764EFB700.png|697]]
#### 临时挂载分区/文件系统
> 注:**`mount` 命令只是临时挂载,不会自动持久化,通过该命令执行的挂载在 Linux 系统重启后就会失效。**
- `$ mount [OPTION] device dir` 🔴:
- `-t type`:指定磁盘/分区所使用的文件系统
```shell
# 示例: 挂载使用ext4文件系统的硬盘分区`/dev/sda2`到`/mnt`
sudo mount -t ext4 /dev/sda2 /mnt
sudo mount /dev/sda2 /mnt # 可省略指定文件系统
# 示例:挂载使用fat32文件系统的U盘到 `/media/usb`目录
sudo mount -t vfat /dev/sdb1 /media/usb
sudo mount /dev/sdb1 /media/usb # 可省略指定文件系统
```
#### 自动挂载文件系统(持久化挂载)
在 `/etc/fstab` 文件中添加挂载项
```shell
# 编辑`/etc/fstab` 文件
sudo vim /etc/fstab
# 在该文件末尾添加挂载信息:
# 挂载设备、挂载点、文件系统类型、挂载选项、控制备份、检查的优先级
# 挂载设备可以是"UUID=..."的形式或者"设备文件名"
# 推荐使用UUID, 以提高系统的稳定性。因为UUID在系统重启或添加新硬盘时不会改变,而设备名可能会变化。
/dev/sda1 /mnt/mydisk ext4 0 2
```
> [!example]
> ![[_attachment/02-开发笔记/11-Linux/Linux 命令行/Linux-文件系统与磁盘管理相关命令.assets/IMG-Linux-文件系统与磁盘管理相关命令-6C88640749E9D350578B13293693B41A.png|766]]
#### 卸载挂载
`$ umount [option] directory|device ` 🔴:卸载**指定路径上挂载的文件系统**,或卸载**已挂载的指定存储设备**
```shell
sudo umount /mnt/mydisk # 按挂载点卸载
sudo umount /dev/sda1 # 按设备卸载
```
<br><br><br>
# 检查和修复文件系统
- `$ fsck [option] device` 文件系统检查
```shell
# 检查并尝试修复`/dev/sda1`上的文件系统
sudo fsck /dev/sda1
```
注:**只能对==未挂载的文件系统==执行 fsck 命令**。
- **检查前卸载文件系统**:在使用`fsck` 检查一个文件系统之前,**确保该文件系统没有被挂载**。对已挂载或正在使用的文件系统运行`fsck`可能导致数据损坏。卸载后进行检查,检查完成再重新挂载即可。
- **备份数据**:在执行`fsck`之前,如果可能,最好备份重要数据。
- **选择正确的文件系统类型**:某些情况下,需要指定正确的文件系统类型,如`fsck.ext4`, `fsck.vfat`等。
- **系统启动时的检查**:大多数 Linux 系统在启动时会自动运行`fsck`来检查文件系统的完整性。
<br><br><br>
# 存储设备及磁盘空间相关
- `df` **只显示已挂载的分区和文件系统信息,不会显示未格式化、未挂载的设备和文件系统**。
- 要查看所有硬盘和分区的信息,包括**未格式化、未挂载的**,可以使用`lsblk` 或 `sudo fdisk -l` 命令
> [!summary] 命令总结:
>
> - 查看**所有存储设备**(包括未格式化/未挂载的)的**分区情况**、**设备类型**、**总大小**、**挂载点**,使用`lsblk` ;
> - 查看所有存储设备(包括未格式化/未挂载的)及其**分区的详细信息**,例如分区类型(如主分区、扩展分区)、大小、起始和结束扇区等,使用 `sudo fdisk -l` **查看磁盘分区表**。
> - 查看存储设备的**UUID**、**文件系统类型**,使用 `blkid` ;
> - 查看所有**已挂载的**文件系统的存储**空间使用情况**,使用`df -h`;
<br><br>
# 磁盘存储空间占用情况
> [!caution]
>
> 关于文件大小:
>
> 在**文件系统**中,存储空间以 "**==固定大小的块(block)==**" 进行分配。
> **文件系统所能分配给文件的最小存储空间**即为 "**一个块的大小**(无论文件实际内容多大,至少也要占一个完整块大小)。
> 根据文件系统的不同,块大小有 512 字节,1KB、2KB 或 4KB 等,其中**典型的Linux 系统采用的块大小为 1KB**。
>
> 当文件写入到 "磁盘" 或其他存储介质时,**磁盘存储空间**同样以 "**固定大小的块(称之为分配单元)**"进行分配。
>
> "**磁盘的分配单元**" 与 "**文件系统的分配块**" 二者的大小并不一定相等:
> 假设 Linux 文件系统的块大小为 1K,而磁盘分配单元为 4K,则一个只有 1 个字符(1 字节)的文件实际要占用 4K 的磁盘空间。
>
> ![[_attachment/02-开发笔记/11-Linux/Linux 命令行/Linux-文件系统与磁盘管理相关命令.assets/IMG-Linux-文件系统与磁盘管理相关命令-FF0087C3213B8449ABE96BEB3BDF96D0.png|216]]
>
>
> 下述命令显示的 "**文件大小**" 即是指其 "**==实际占用的磁盘空间==**",因此其大小不会小于**磁盘空间的分配单元大小**(例如 4KB)
>
<br>
#### 查看指定目录下的文件占用的磁盘空间大小
###### ls 命令
- `$ ls -sh [NAME...]`: 显示**当前目录或指定目录下各个文件所占用的磁盘空间大小**,或**指定文件所占用的磁盘空间大小**
![[02-开发笔记/11-Linux/Linux 命令行/Linux-文件与目录相关命令#^x14wwr]]
###### du 命令
> `du`:disk usage
- `$ du [OPTION] [NAME...]`:显示**当前目录或指定目录下各个文件所占用的磁盘空间大小**
- `-h`:human-readable,即以 MB、GB 等单位显示大小
- `-s`:只显示 "**总和**"
```shell
du # 显示当前目录下所有文件、目录和子目录的磁盘占用情况
du -hs # 显示当前目录已占用的磁盘空间 -s: 汇总 -h: 以M和G为单位;
du -hd 1 | sort -hr # 查看当前目录下各子目录的磁盘占用情况, 按占用空间倒序排序
```
![[_attachment/02-开发笔记/11-Linux/Linux 命令行/Linux-文件系统与磁盘管理相关命令.assets/IMG-Linux-文件系统与磁盘管理相关命令-08941BA405D886154FDCE99A15FA6ABD.png|231]]
<br>
#### 查看已挂载文件系统的磁盘存储空间使用情况
###### df 命令
> df:disk free-space
- `$ df [OPTION]... [FILE]...`: 查看 **每个文件系统** 已使用的磁盘空间及剩余可用磁盘空间
- `-h`:human-readable,即以 MB、GB 等单位显示大小
- `-T`:显示文件系统类型
- `-t type`:只显示指定文件系统的磁盘剩余空间
> [!info]
> 显示信息如下,包括:**设备文件名、总大小、已使用、可用、使用率、挂载点**。
>
> ![[_attachment/02-开发笔记/11-Linux/Linux 命令行/Linux-文件系统与磁盘管理相关命令.assets/IMG-Linux-文件系统与磁盘管理相关命令-0778C4C69953FAACDCCFCDB982E73B8A.png|459]]
>
<br><br><br>
# 查看硬盘和分区信息
#### 查看存储设备的 UUID 及文件系统类型
> 未格式化的存储设备没有 UUID,`blkid` 命令对其可能无输出,或者只显示其设备文件名。
- `$ blkid`:查看所有存储设备的 UUID
#### 查看块设备相关信息——blkid
`$ blkid` 查看所有块设备的相关信息。
显示信息包括:
- **设备名称**
- **UUID**(格式化创建文件系统时生成的唯一标识符)
- **文件系统类型**
- **标签**(如果分区有LABEL)
- 分区信息()
- 块大小(BLOCK_SIZE)
> [!example]
> 
<br>
#### 查看块设备及使用情况——lsblk
`$ lsblk` 查看**所有可用的块设备** (list block devices)信息
`$ lsblk /dev/sda1` 查看指定块设备信息
包含信息:
- **磁盘设备名称**(如`sda`)及其分区(如`sda1`、`sda2`等)
- 每个设备或分区的**挂载点**(MountPoints)
- 磁盘和分区的**大小**
- **设备类型**(磁盘`disk`、分区`part`、`loop`、逻辑卷`lvm`等)
> [!example]
>
> 
>
> [!example] `-f` 参数附带显示磁盘/分区的文件系统类型,空间使用率。
> 
<br>
#### 查看磁盘分区——fdisk
`$ sudo fdisk -l` 查看**磁盘分区表**
**只包含磁盘及其分区本身的信息**,不包含文件系统相关的内容。
> [!example]
> 
- 每个磁盘的设备标识符(如`/dev/sda`)
- 磁盘总大小
- 磁盘上每个分区的信息,包括分区类型(如主分区、扩展分区)、大小、起始和结束扇区等
```shell
sudo fdisk -l # 列出所有可用磁盘及其分区的详细信息
```
<br>
#### 分区管理
- `$ sudo fdisk /dev/sda` 使用 fdisk 为指定设备创建分区
- `$ sudo gdisk /dev/sda` 使用 gdisk 为指定设备创建分区
- `$ sudo parted` 启用parted分区管理工具,进入交互模式。在交互模式下可执行`print` 、`resizepart`、`mklabel` 、`mkpart` 、`quit`等命令。
<br>
#### LVM 逻辑卷管理
- `pvcreate`, `pvdisplay`, `pvremove`:用于管理物理卷。
- `vgcreate`, `vgdisplay`, `vgextend`, `vgreduce`:用于管理卷组。
- `lvcreate`, `lvextend`, `lvreduce`, `lvremove`:用于管理逻辑卷。
```shell
# 创建物理卷PV
sudo pvcreate /dev/sdc1 /dev/sdd1 /dev/sde1
# 创建卷组VG: 创建时可指定将多个PV加入VG
sudo vgcreate vg00 /dev/sdc1 /dev/sdd1
# 创建逻辑卷LV. 将生成一个设备文件, 例如
sudo lvcreate -L 1g -v vg00 # -L指定逻辑卷大小
# 查看逻辑卷信息
sudo lvdisplay /dev/vg00/lvo10
# 格式化LV
SUDO mkfs.ext4 /dev/vg00/lvo10
# 挂载LV: 临时挂载用mount, 持久化挂载则添加到/etc/fstab文件
```
<br><br><br>
# 参考资料
# Footnotes