磁盘分区情况 (df)

Linux df(英文全拼:display free disk space) 命令用于用于显示文件系统的磁盘空间使用情况,包括总容量、已用空间、可用空间和挂载点等信息。

语法

df [选项]... [FILE]...

参数说明
-a--all显示所有文件系统,包括虚拟文件系统(如 procsysfs
-B--block-size=SIZE指定显示单位(如 -BK=KB,-BM=MB,-BG=GB)
-h--human-readable以易读格式显示(自动转换单位:K, M, G, T,基于 1024)
-H--si类似 -h,但以 1000 为换算单位(符合 SI 标准)
-i--inodes显示 inode 使用情况(而非磁盘空间)
-k以 1KB 为单位显示(默认单位)
-m以 1MB 为单位显示(部分系统支持)
-l--local仅显示本地文件系统(排除网络文件系统如 NFS)
--no-sync获取信息前不调用 sync(默认行为)
--sync获取信息前调用 sync(确保数据最新)
--total显示总计信息
-t--type=TYPE仅显示指定类型的文件系统(如 ext4xfs
-T--print-type显示文件系统类型
-x--exclude-type=TYPE排除指定类型的文件系统
-P--portability使用 POSIX 兼容的输出格式(避免换行问题)
--output=FIELD_LIST自定义输出字段(如 source,fstype,size,pcent
--help显示帮助信息
--version显示版本信息
 df 
Filesystem     1K-blocks    Used     Available Use% Mounted on 
/dev/sda6       29640780 4320704     23814388  16%     / 
udev             1536756       4     1536752    1%     /dev 
tmpfs             617620     888     616732     1%     /run 
none                5120       0     5120       0%     /run/lock 
none             1544044     156     1543888    1%     /run/shm

说明:

  • Filesystem:文件系统的名称或标识符。
  • 1K-blocks:文件系统的总容量,以 1KB 块为单位。即文件系统总大小。
  • Used:文件系统已经使用的容量,以 1KB 块为单位。
  • Available:文件系统中仍然可用的容量,以 1KB 块为单位。
  • Use%:文件系统已使用容量占总容量的百分比。
  • Mounted on:文件系统被挂载到的目录或位置。

常用选项 -h:以适当的单位显示,如 GB、MB 等 -T:显示文件系统类型。 —total:显示总磁盘使用情况的摘要行。 -i:显示 inode 使用情况,而不是磁盘空间。 -t <文件系统类型>:仅显示特定类型的文件系统。

df -Bg   以GB为单位

目录大小统计 (du)

Linux du (英文全拼:disk usage)命令用于显示目录或文件的大小。

du 会显示指定的目录或文件所占用的磁盘空间。

语法

du [-abcDhHklmsSx][-L <符号连接>][-X <文件>][--block-size][--exclude=<目录或文件>][--max-depth=<目录层数>][--help][--version][目录或文件]

参数说明

  • -a或-all 显示目录中个别文件的大小。
  • -b或-bytes 显示目录或文件大小时,以byte为单位。
  • -c或—total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
  • -D或—dereference-args 显示指定符号连接的源文件大小。
  • -h或—human-readable 以K,M,G为单位,提高信息的可读性。
  • -H或—si 与-h参数相同,但是K,M,G是以1000为换算单位。
  • -k或—kilobytes 以1024 bytes为单位。
  • -l或—count-links 重复计算硬件连接的文件。
  • -L<符号连接>或—dereference<符号连接> 显示选项中所指定符号连接的源文件大小。
  • -m或—megabytes 以1MB为单位。
  • -s或—summarize 仅显示指定目录或文件的总大小,而不显示其子目录的大小。
  • -S或—separate-dirs 显示个别目录的大小时,并不含其子目录的大小。
  • -x或—one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
  • -X<文件>或—exclude-from=<文件> 在<文件>指定目录或文件。
  • —exclude=<目录或文件> 略过指定的目录或文件。
  • —max-depth=<目录层数> 超过指定层数的目录后,予以忽略。
  • —help 显示帮助。
  • —version 显示版本信息。
 
du -h --max-depth=1 /etc/
du -h --max-depth=1 /opt/webapps/geoserver/
du -h --max-depth=1 /root/yang/llm-ncws/upload
 
du -h --max-depth=6 /home/vg_llm/llm_dataset/
#查看当前目录下一级子文件和子目录占用的磁盘容量。
du -lh --max-depth=1 
 
 
## **统计文件数量​**
 递归统计所有文件(包括子目录)
find /mnt/sde -type f | wc -l
 
 仅统计当前目录下的文件(不包括子目录)
find /path/to/directory -maxdepth 1 -type f | wc -l
 
 
 
## **统计文件夹大小​**
 显示文件夹总大小(人类可读格式,如 MB/GB)
du -sh /path/to/directory
 
 显示精确字节大小
du -sb /path/to/directory

未挂载的磁盘

lsblk 是 Linux 系统中的一个实用命令,用于列出系统中所有可用的块设备信息。块设备是指以块为单位进行数据读写的存储设备,如硬盘、SSD、U盘等。

lsblk

常用选项

选项说明
-a显示所有设备(包括空设备)
-b以字节为单位显示设备大小
-d仅显示设备本身,不显示分区
-e排除指定主设备号的设备
-f显示文件系统信息
-i使用 ASCII 字符显示树状结构
-J以 JSON 格式输出
-l使用列表格式输出(非树状)
-m显示设备的所有者信息和权限
-n不显示标题行
-o指定要显示的列
-P以键值对格式输出
-r使用原始格式输出
-S仅显示 SCSI 设备
-t显示设备的拓扑信息
-x按指定列排序

字段说明

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda    253:0    0   40G  0 disk
└─vda1 253:1    0   40G  0 part /
vdb    253:16   0  100G  0 disk           #没有挂载点,即该磁盘未挂载

默认情况下,lsblk 命令会显示以下列:

列名说明
NAME设备名称(省略了 /dev 前缀)
MAJ:MIN主设备号和次设备号
RM是否为可移动设备(1表示是,0表示否)
SIZE设备大小
RO是否为只读设备(1表示是,0表示否)
TYPE设备类型(disk, part, rom等)
MOUNTPOINT设备的挂载点

设备类型 TYPE

类型说明常见示例
disk物理磁盘SATA/SCSI/SAS 硬盘、NVMe SSD
part磁盘分区主分区、扩展分区、逻辑分区
rom只读设备光盘驱动器
loop回环设备将文件虚拟为块设备(如 ISO 文件)
lvmLVM 逻辑卷通过 LVM 管理的逻辑卷
crypt加密设备LUKS/dm-crypt 加密卷
raidRAID 设备Linux mdraid 阵列
dm设备映射器设备device-mapper 设备(LVM、加密等底层)
mpath多路径设备存储多路径 I/O 设备
zfsZFS 卷/分区ZFS 文件系统的卷或分区
btrfsBtrfs 卷/分区Btrfs 文件系统的卷或分区
squashfsSquashFS 设备只读压缩文件系统设备
nvmNVMe 命名空间NVMe 子系统中的命名空间
l符号链接指向其他设备的符号链接
linear线性设备device-mapper 线性目标设备
striped条带化设备device-mapper 条带化目标设备
mirror镜像设备device-mapper 镜像目标设备
部分类型(如 tmpfsfuse)通常不显示为块设备

挂载 mount

Linux mount 命令是经常会使用到的命令,它用于挂载Linux系统外的文件。

** 语法:**

mount [-hV]
mount -a [-fFnrsvw] [-t vfstype]
mount [-fnrsvw] [-o options [,...]] device | dir
mount [-fnrsvw] [-t vfstype] [-o options] device dir

参数说明:

  • -V:显示程序版本
  • -h:显示辅助讯息
  • -v:显示较讯息,通常和 -f 用来除错。
  • -a:将 /etc/fstab 中定义的所有档案系统挂上。
  • -F:这个命令通常和 -a 一起使用,它会为每一个 mount 的动作产生一个行程负责执行。在系统需要挂上大量 NFS 档案系统时可以加快挂上的动作。
  • -f:通常用在除错的用途。它会使 mount 并不执行实际挂上的动作,而是模拟整个挂上的过程。通常会和 -v 一起使用。
  • -n:一般而言,mount 在挂上后会在 /etc/mtab 中写入一笔资料。但在系统中没有可写入档案系统存在的情况下可以用这个选项取消这个动作。
  • -s-r:等于 -o ro
  • -w:等于 -o rw
  • -L:将含有特定标签的硬盘分割挂上。
  • -U:将档案分割序号为 的档案系统挂下。-L 和 -U 必须在/proc/partition 这种档案存在时才有意义。
  • -t:指定档案系统的型态,通常不必指定。mount 会自动选择正确的型态。
  • -o async:打开非同步模式,所有的档案读写动作都会用非同步模式执行。
  • -o sync:在同步模式下执行。
  • -o atime、-o noatime:当 atime 打开时,系统会在每次读取档案时更新档案的『上一次调用时间』。当我们使用 flash 档案系统时可能会选项把这个选项关闭以减少写入的次数。
  • -o auto、-o noauto:打开/关闭自动挂上模式。
  • -o defaults:使用预设的选项 rw, suid, dev, exec, auto, nouser, and async.
  • -o dev、-o nodev-o exec、-o noexec允许执行档被执行。
  • -o suid、-o nosuid:
  • 允许执行档在 root 权限下执行。
  • -o user、-o nouser:使用者可以执行 mount/umount 的动作。
  • -o remount:将一个已经挂下的档案系统重新用不同的方式挂上。例如原先是唯读的系统,现在用可读写的模式重新挂上。
  • -o ro:用唯读模式挂上。
  • -o rw:用可读写模式挂上。
  • -o loop=:使用 loop 模式用来将一个档案当成硬盘分割挂上系统。

挂载实例

 
 格式化
mkfs -t ext4 /dev/vdb1
 创建挂载目录
mkdir -p /mnt/data/
 挂载
sudo mount /dev/vdb1 /mnt/data
 
 
mkfs -t ext4 /dev/vdb
mkdir -p /mnt/data/
sudo mount /dev/vdb /mnt/data

将 /dev/hda1 挂在 /mnt 之下。

#mount /dev/hda1 /mnt

将 /dev/hda1 用唯读模式挂在 /mnt 之下。

#mount -o ro /dev/hda1 /mnt

将 /tmp/image.iso 这个光碟的 image 档使用 loop 模式挂在 /mnt/cdrom之下。用这种方法可以将一般网络上可以找到的 Linux 光 碟 ISO 档在不烧录成光碟的情况下检视其内容。

#mount -o loop /tmp/image.iso /mnt/cdrom

系统盘的挂载

因为系统磁盘的起始位置包含主引导记录和一些磁盘结构,可以使用parted查看该分区结构

sudo parted /dev/vdc1 unit b print

可以看到该磁盘的起始位置为 1048576B (Start),因此在挂载该磁盘需要利用offset参数设置1048576B的分区偏移量

mount -o loop,ro,offset=1048576 /dev/vdc1 /mnt/data
mount -o loop,ro,offset=0 /dev/vdc1 /mnt/data

挂载 (Microsoft basic data 文件系统的分区)

fdisk -l 可以查看分区类型; 在 Linux 系统中挂载 NTFS 磁盘需要安装额外的驱动 (通常是 ntfs-3g)

 Debian/Ubuntu
sudo apt update
sudo apt install ntfs-3g
 
 Fedora/RHEL
sudo dnf install ntfs-3g
 
sudo mount -t ntfs-3g /dev/sde2 /mnt/sde
sudo mount /dev/sde2 /mnt/sde

永久挂载

  1. 获取文件系统的 UUID 或设备路径​​ 推荐使用 UUID(更稳定,设备名可能变化):
 
blkid
 
# OR
lsblk -f
  1. 编辑 /etc/fstab文件​
sudo nano /etc/fstab

添加一行配置, 挂载到 /mnt/mydata 格式为:

UUID=xxxxx-xxxx-xxxx  /mnt/mydata  ext4  defaults  0  2
  • UUID/设备路径​​:文件系统标识。
  • ​挂载点​​:目标目录。
  • ​文件系统类型​​:如 ext4ntfsxfs等。
  • ​挂载选项​​:defaults包含 rw,suid,dev,exec,auto,nouser,async
  • ​dump 备份​​:0表示不备份。
  • ​fsck 顺序​​:0(不检查)、1(根目录优先)、2(其他)。

卸载 umount

Linux umount(英文全拼:unmount)命令用于卸除文件系统。 umount可卸除目前挂在Linux目录中的文件系统。

语法

umount [-ahnrvV][-t <文件系统类型>][文件系统]

参数

  • -a 卸除/etc/mtab中记录的所有文件系统。
  • -h 显示帮助。
  • -n 卸除时不要将信息存入/etc/mtab文件中。
  • -r 若无法成功卸除,则尝试以只读的方式重新挂入文件系统。
  • -t<文件系统类型> 仅卸除选项中所指定的文件系统。
  • -v 执行时显示详细的信息。
  • -V 显示版本信息。
  • [文件系统] 除了直接指定文件系统外,也可以用设备名称或挂入点来表示文件系统。

实例

下面两条命令分别通过设备名和挂载点卸载文件系统,同时输出详细信息:

 umount -v /dev/sda1          通过设备名卸载  
/dev/sda1 umounted  
 umount -v /mnt/mymount/      通过挂载点卸载  
/tmp/diskboot.img umounted 
 

磁盘分区 (fdisk)

fdisk -l

Disk /dev/vda: 150 GiB, 161061273600 bytes, 314572800 sectors
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: gpt
Disk identifier: 22B37E1B-9A5E-4EF9-9C7D-B29994293EF6
 
Device       Start      End  Sectors Size Type
/dev/vda1     2048     4095     2048   1M BIOS boot
/dev/vda2     4096  4198399  4194304   2G Linux filesystem
/dev/vda3  4198400 83884031 79685632  38G Linux filesystem
 

Disklabel type 分区类型

Disk /dev/vda 总的扇区是: 314572800, 而最后一个/dev/vda3 分区的结束点是: 83884031, 所以这块磁盘远远还没有分完

对于 Linux 操作系统而言,当磁盘分区形式选用 GPT 时,fdisk 分区工具将无法使用,需要采用 parted 工具。 disk提供了一个交互式接口来管理分区,它有许多命令,分别用于不同的管理功能;所有的操作均在内存中完成,没有直接同步到磁盘;直接使用w命令保存至磁盘上

扩容分区 for GPT

以磁盘路径是/dev/vdb为例

  1. 先卸载该磁盘的所有挂载
umount <挂载>

umount /mnt/data

执行以下命令,确认该云硬盘是否还有分区已挂载。需全部卸载

mount | grep '/dev/vdb'
  1. 执行命令,进入 parted 分区工具。
parted '/dev/vdb'
  • 执行 unit s 命令,将显示和操纵单位变成 sector(默认为GB)。
  1. 查看分区信息, 记录Start
  • 执行 p

若系统出现以下Error,请输入“Fix”。

Error: The backup GPT table is not at the end of the disk, as it should be. .. GPT分区表信息存储在磁盘开头,为了减少分区表损坏的风险,同时在磁盘末尾会备份一份。当磁盘容量扩大后,末尾位置也会随之变化,因此需要根据系统提示输入“Fix”,将分区表信息的备份文件挪到新的磁盘末尾位置

  1. 执行以下命令,删除原有分区
  • rm <分区 Number>

删除分区并新建时,Start 值必须保持不变,否则将会引起数据丢失!!!

  1. 执行以下命令
  • mkpart 磁盘分区名称 起始磁柱值 截止磁柱值 或主分区mkpart primary <原分区起始扇区> 100% mkpart /dev/vdb3 4198400 100%

    其中,<原分区起始扇区> 必须与删除之前的分区一致!!,Start 值 100%表示此分区到磁盘的最末尾。

  1. 执行以下命令,查看新分区是否已创建成功。
  • print
  1. 退出 parted 工具。
  • quit

更新系统层的磁盘大小

至此 lsblk 命令可以查看的扩容后的大小, 但 df 还是旧的大小.

lsblk 查看的是 block device,也就是逻辑磁盘大小。 df 查看的是file system, 也就是文件系统层的磁盘大小。

对于 ext{2,3,4} 文件系统:

resize2fs /dev/vdb3

对于 XFS 文件系统:

xfs_growfs /dev/vdb3

扩容逻辑分区

root@localhost:/home/sny lsblk
NAME                      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
vda                       253:0    0   150G  0 disk
├─vda1                    253:1    0     1M  0 part
├─vda2                    253:2    0     2G  0 part /boot
└─vda3                    253:3    0   148G  0 part
  └─ubuntu--vg-ubuntu--lv 252:0    0    19G  0 lvm  /
 

vda3 分区有148GB的空间,而 ubuntu--vg-ubuntu--lv 逻辑卷目前只有19GB。意味着有很多空间可以用来扩容逻辑卷。

root@localhost:/home/sny df -h
Filesystem                         Size  Used Avail Use% Mounted on
tmpfs                              790M  1.2M  789M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   19G   19G     0 100% /
tmpfs                              3.9G     0  3.9G   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
/dev/vda2                          2.0G  182M  1.7G  10% /boot
tmpfs                              790M   12K  790M   1% /run/user/0

以下命令将逻辑卷扩展到最大可用空间:

lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv

如果你想要增加一个特定的数值,例如增加10GB,可以使用以下命令:

lvextend -L +10G /dev/mapper/ubuntu--vg-ubuntu--lv

更新系统层的磁盘大小

对于 ext4 文件系统:

resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

对于 XFS 文件系统:

xfs_growfs /dev/mapper/ubuntu--vg-ubuntu--lv

扩容分区 for MBR

(TODO )

通过 fdisk 进行已有磁盘分区扩容

[root@localhost ~] fdisk /dev/vda
 
欢迎使用 fdisk (util-linux 2.35.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
 
 
命令(输入 m 获取帮助):p
Disk /dev/vda:200 GiB,214748364800 字节,419430400 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x24b4d52c
 
设备       启动    起点      末尾      扇区 大小 Id 类型
/dev/vda1  *       2048   2099199   2097152   1G 83 Linux
/dev/vda2       2099200 209715199 207616000  99G 8e Linux LVM
 
命令(输入 m 获取帮助):d  先删除分区, 对应 /dev/vda2
分区号 (1,2, 默认  2): 2
 
分区 2 已删除。
 
命令(输入 m 获取帮助):p  在看一下
Disk /dev/vda:200 GiB,214748364800 字节,419430400 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x24b4d52c
 
设备       启动  起点    末尾    扇区 大小 Id 类型
/dev/vda1  *     2048 2099199 2097152   1G 83 Linux
 
命令(输入 m 获取帮助):n  默认会从上一个起始值 到磁盘最大 末尾值
分区类型
   p   主分区 (1 primary, 0 extended, 3 free)
   e   扩展分区 (逻辑分区容器)
选择 (默认 p):e
分区号 (2-4, 默认  2):
第一个扇区 (2099200-419430399, 默认 2099200):
最后一个扇区,+/-sectors +size{K,M,G,T,P} (2099200-419430399, 默认 419430399):
 
创建了一个新分区 2,类型为“Extended”,大小为 199 GiB。
分区 #2 包含一个 LVM2_member 签名。
 
您想移除该签名吗?是[Y]/否[N]:Y
 
写入命令将移除该签名。
 
命令(输入 m 获取帮助):w
分区表已调整。
正在同步磁盘。
# 重启
reboot 
 
# 更新 file system 大小
resize2fs -f /dev/sdb1

配置虚拟内存及分区

  1. dd if=/dev/zero of=/tmp/swapfile bs=1024 count=1024k 这样就建立一个 /tmp/swapfile的分区文件,大小为1G。
dd if=/dev/zero of=/tmp/swapfile bs=1024 count=2048k # 命令将创建一个2G的swap文件
  1. 创建好 Swap 文件,还需要格式化后才能使用。运行命令:mkswap /tmp/swapfile

  2. 激活 Swap ,运行命令:swapon /tmp/swapfile

要先改权限 sudo chmod 600 /tmp/swapfile, 否则会报 swapon: /tmp/swapfile: insecure permissions 0644, 0600 suggested.

关闭交换分区 对应的关闭交换分区命令是: swapoff /tmp/swapfile

  1. 再次运行命令: swapon -s 你会发现返回的信息概要

  2. 如果要机器重启的时候自动挂载 Swap ,那么还需要修改 fstab 配置。 用 vim 打开 /etc/fstab 文件,在其最后添加如下一行: /tmp/swapfile swap swap defaults 0 0

如果内存够大,应当告诉 Linux 不必太多的使用 Swap 分区,可以通过修改 swappiness 的参数来设置。

swappiness=0 的时候表示最大限度使用物理内存,swappiness=100 的时候表示积极的使用 Swap 分区

通过以下命令可以看到:

cat /proc/sys/vm/swappiness

我们可以调整 swappiness 的值到一个合适的参数,从而达到最优化使用 Swap 的目的。 使用 sysctl 命令:

sysctl vm.swappiness=80