btrfs磁盘管理
热扩容
# 把/dev/sda5扩容到/目录 -f=强制追加(比如之前是ntfs会强制转为btrfs)
sudo btrfs device add /dev/sda5 /
sudo btrfs device add /dev/sda5 / -f
# resize root
sudo btrfs filesystem resize max /
# 查看是否添加成功
df -h
热缩小磁盘并分离, 并把分离的空间进行格式化
# resize 命令不会操作基础分区的大小。如果要放大/缩小文件系统,则必须确保在扩大文件系统之前可以扩展分区,并在减小文件系统大小后缩小分区。这可以使用 fdisk(8) 或 parted(8) 来删除现有分区,并用新的所需大小重新创建它。重新创建分区时,请确保使用与以前相同的起始分区偏移量。
# 630.2G
sudo btrfs filesystem resize -1G /
# 缩小的是nvme0n1p4
# Resize device id 1 (/dev/nvme0n1p4) from 300.69GiB to 299.69GiB
# 操作分区前查看End的位置,多个物理分区会显示多个, [322865360896]就是实际大小
# fdisk -l
sudo btrfs filesystem show / --raw
# Label: none uuid: 897d3141-a5b9-446a-b504-3f56c2fd5911
# Total devices 2 FS bytes used 334994829312
# devid 1 size [322865360896] used 322864283648 path /dev/nvme0n1p4
# devid 2 size 698659471360 used 35433480192 path /dev/nvme0n1p2
# Number位置
parted /dev/nvme0n1p4
p/print
# 执行缩小物理分区 [Number] [End]
resizepart 1 322865360896
# 如果是ext也可以直接热缩小(未生效)
resizepart 1 10G
查看文件系统结构
sudo btrfs filesystem show
# 在/的uuid挂载2devices 显示:
➜ sudo btrfs filesystem show
Label: none uuid: 57314842-45ff-457a-8c7e-f2d6fce57d33
Total devices 2 FS bytes used 102.96GiB
devid 1 size 120.82GiB used 120.82GiB path /dev/nvme0n1p2
devid 2 size 1.86GiB used 0.00B path /dev/nvme0n1p4
开启压缩
# 查看当前卷的状态
findmnt -vno OPTIONS /
# 是否开启compress选项, 比如压缩等
findmnt -vno OPTIONS / | grep compress
# 查看压缩占比, 很慢
sudo compsize -x /
# Processed 2558504 files, 1062561 regular extents (1382788 refs), 1301158 inline.
# Type Perc Disk Usage Uncompressed Referenced
# TOTAL 99% 127G 127G 158G
# none 100% 126G 126G 157G
# zstd 31% 3.1M 9.9M 9.8M
# prealloc 100% 199M 199M 380M
◈ Disk Usage 是实际分配在硬盘上的空间,
◈ Uncompressed 是如果没有压缩,文件所需要的空间,
◈ Referenced 是所有未压缩文件加起来的总大小。
# nixos开启ztsd压缩等级3, 压缩级别(1-19,默认值为3)
# fileSystems.
options = [ "compress=zstd:3" ];
# 在这时,如果你对现有文件系统采用压缩,然后通过 df 或类似命令检查空间利用率,你会发现什么都没变。这是因为 Btrfs 自身不会 “重新压缩” 所有已有的文件。压缩只会发生在往磁盘写新数据的时候。有一些方式去执行显式的重压缩:
# 1. 等待,什么都不做:只要文件被修改并被写回磁盘,Btrfs 根据配置压缩新写入的文件内容。如果我们等待足够长,越来越多的文件被重写,在某个时间点就会被压缩。
# 2. 移动文件到另一个文件系统然后移动回来:取决于你想压缩哪些文件,这可能是相当乏味的选项。
# 3. 执行一次 Btrfs 碎片整理。
cat /etc/fstab
# 之前
/dev/disk/by-uuid/897d3141-a5b9-446a-b504-3f56c2fd5911 / btrfs x-initrd.mount 0 0
# 之后
/dev/disk/by-uuid/897d3141-a5b9-446a-b504-3f56c2fd5911 / btrfs x-initrd.mount,compress=zstd:3 0 0