我有一个luksOpen的LUKS分区:/dev/sda1--allow-discards
cryptsetup --allow-discards luksOpen /dev/sda1 root
Run Code Online (Sandbox Code Playgroud)
然后我ext4使用discard选项挂载文件系统:
grep /dev/mapper/root /proc/mounts
/dev/mapper/root / ext4 ro,relatime,block_validity,discard,delalloc,barrier,user_xattr,acl 0 0
Run Code Online (Sandbox Code Playgroud)
然后我修剪已安装分区上的可用空间:
fstrim -v /
Run Code Online (Sandbox Code Playgroud)
有df,我看到/有80%的可用空间。这意味着在 上/dev/sda1,磁盘的 80% 是二进制零。
如果我克隆图像 cat
cat /dev/sda1 > sda1.img
Run Code Online (Sandbox Code Playgroud)
并使用 压缩图像xz,我希望磁盘上的所有零都被压缩。由于磁盘上 20% 的数据是加密的,因此它看起来应该是随机的并且是不可压缩的。因此,xz 压缩的图像应该是近似的。原始尺寸的 20%。
但是,生成的 xz 压缩图像与原始原始图像的大小大致相同。
我的推理正确吗?
为什么我的理论没有转化为实践?
我尝试使用 dm-crypt 和 LVM 设置 Fedora 25,但很难使 TRIM 工作。
$ sudo fstrim -av
/boot: 28.6 MiB (30003200 bytes) trimmed
/: 56.5 GiB (60672704512 bytes) trimmed
$ sudo fstrim -av
/boot: 0 B (0 bytes) trimmed
/: 56.5 GiB (60671877120 bytes) trimmed
Run Code Online (Sandbox Code Playgroud)
从上面的输出中可以看出,重复运行fstrim在未加密的ext4 上有效 /boot,但似乎对/(在同一磁盘上)没有影响。
设置是 SSD -> dm-crypt -> LVM -> XFS
$ lsblk -D
NAME DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
sda 0 512B 2G 0
??sda2 0 512B 2G 0
? ??luks-dd5ce54a-34c9-540c-a4cf-2a712b8a3a5e 0 512B …Run Code Online (Sandbox Code Playgroud) $ uname -r
5.0.9-301.fc30.x86_64
$ findmnt /
TARGET SOURCE FSTYPE OPTIONS
/ /dev/vda3 ext4 rw,relatime,seclabel
$ sudo fstrim -v /
fstrim: /: the discard operation is not supported
Run Code Online (Sandbox Code Playgroud)
相同的 VM,但在将磁盘从 VirtIO 切换到 SATA 之后:
$ findmnt /
TARGET SOURCE FSTYPE OPTIONS
/ /dev/sda3 ext4 rw,relatime,seclabel
$ sudo fstrim -v /
/: 5.3 GiB (5699264512 bytes) trimmed
Run Code Online (Sandbox Code Playgroud)
虚拟磁盘由 QCOW2 文件支持。我正在使用 virt-manager/libvirt。libvirt-daemon 版本为 4.7.0-2.fc29.x86_64。我的主机当前运行的是 vanilla 内核构建 5.1 (ish),所以目前它有点“定制”,但我从一个库存的 Fedora 内核配置开始构建它。
有没有办法以某种方式在 VirtIO 上启用丢弃支持?或者代码只是不支持它?我不一定需要如何启用它的确切说明,但我感到惊讶和好奇,我想要一个可靠的答案:-)。
我正在使用 Linux 服务器,想知道是否有办法可以确定我的 SSD 是否支持 fstrim。我尝试过hdparm -I /dev/sda,但它不可用,我无法安装它。我还有其他方法可以做到吗?任何帮助表示赞赏。谢谢!
我也很想知道如果我在不支持修剪的设备上运行 fstrim 会发生什么?它会导致无操作吗?
我在带有三星 PM851 SSD 的戴尔 XPS 9343 上安装了 Linux。
我最近读到许多 SSD 不支持 TRIM 操作。
所以我想检查discard选项是否在我的系统上有效。
第一步,我尝试简单地运行sudo fstrim --verbose --all并报告41GB trimmed;这让我感到害怕,因为我一直期待一个很小的价值,因为我一直启用 TRIM(见上文);事实上,如果我再次重新运行该命令,我会得到O bytes trimmed. 正常吗? 即使我在 /etc/fstab 中有丢弃选项?
PS:我尝试遵循此处提出的解决方案,但由于trim.test: FIBMAP unsupported.
PS2:它是带有 GPT 和 EXT4 文件系统的平面SSD(无 LVM 或 RAID)
我有一个带有多个分区的 SSD 磁盘。其中之一是有一个 btrfs 卷,安装为/home,其中包含一个 ecryptfs 主目录。
当我修剪卷时,似乎 fstrim 不会修剪此类卷上的数据块 - 为什么?您可以在下面看到有关设置的所有信息,以及我遵循的步骤,以及注释。
$ cat /etc/fstab:
UUID=xxx / ext4 errors=remount-ro 0 1
UUID=yyy /media/vfio ext4 defaults 0 2
UUID=zzz /home btrfs defaults 0 2
Run Code Online (Sandbox Code Playgroud)
$ mount | grep sda:
/dev/sda5 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
/dev/sda1 on /media/vfio type ext4 (rw,relatime,stripe=32721,data=ordered)
/dev/sda2 on /home type btrfs (rw,relatime,ssd,space_cache,subvolid=5,subvol=/)
Run Code Online (Sandbox Code Playgroud)
$ ls -la /home /home/myuser/.Private # summary:
/home:
.ecryptfs
myuser
/home/myuser/.Private -> /home/.ecryptfs/myuser/.Private
Run Code Online (Sandbox Code Playgroud)
$ df -h:
Filesystem Size …Run Code Online (Sandbox Code Playgroud) 尝试在我的根分区(LVM 逻辑卷上的 ext4,单个物理卷 - 支持 TRIM 的 SSD)上运行 fstrim 会产生错误:
fstrim -v /
fstrim: /: the discard operation is not supported
Run Code Online (Sandbox Code Playgroud)
但是,在同一个单 PV 卷组中的不同 LV 上运行它可以正常工作。两者的挂载选项(根据/proc/mounts)是相同的:rw,relatime,errors=remount-ro,data=ordered.
issue_discards = 1设置在 中lvm.conf,如果这很重要。
为什么只有其中之一支持修剪?