首先,是的,事实上,我确实怀疑将文件系统从 ext4 更改为 btrfs 会破坏 GRUB 和 fstab。
现在,这就是发生的事情。我无缝地将文件系统转换为btrfs并且效果很好。现在,我似乎无法启动,因为我收到“GRUB 错误:未知文件系统”。如何修复 GRUB 和 fstab 以使用新文件系统进行更新?
有一个由 apt-btrfs-snapshot 创建的快照不会删除
Delete subvolume '/tmp/foo/@apt-snapshot-2013-04-XX_1X:3X:XX'
ERROR: cannot delete '/tmp/foo/@apt-snapshot-2013-04-XX_1X:3X:XX' - Directory not empty
Run Code Online (Sandbox Code Playgroud)
我怎样才能删除它?
我在 btrfs 卷的磁盘空间有问题。df显示有足够的磁盘空间。但是当我试图复制 10GB 测试文件系统时,说这个设备上没有磁盘空间。
df -h | grep /mnt/ssd:
/dev/sda 448G 135G 313G 31% /mnt/ssd
同样在这里:
btrfs filesystem df /mnt/ssd:
Data, RAID1: total=446.12GiB, used=133.29GiB
System, RAID1: total=8.00MiB, used=80.00KiB
Metadata, RAID1: total=1.00GiB, used=609.05MiB
GlobalReserve, single: total=405.53MiB, used=0.00B
Run Code Online (Sandbox Code Playgroud)
我不知道如何读取这个输出:
sudo btrfs filesystem show:
Label: none uuid: aba64e21-69d1-46c1-b3f2-dfda832b67fd
Total devices 2 FS bytes used 133.88GiB
devid 1 size 447.13GiB used 447.13GiB path /dev/sda
devid 2 size 447.13GiB used 447.13GiB path /dev/sdb
Run Code Online (Sandbox Code Playgroud)
那么使用的是 133.88GiB 还是 447.13GiB?非常混淆。
我想我被 btrfs 中的一个已知错误击中了:
https://www.spinics.net/lists/linux-btrfs/msg60984.html
当然,错误消息看起来很相似。如果是同样的问题,似乎有点不幸的是,针对一个 2 年之久的问题的修复程序尚未移植到 V4.9 稳定内核中(这是 Debian 9 使用的内核)
我现在处于文件系统 inode 之一存在范围问题的情况(如 所报告的btrfs check):
root 257 inode 2607184 errors 100, file extent discount
Found file extent holes:
start: 0, len: 81920
Run Code Online (Sandbox Code Playgroud)
似乎没有太多关于如何摆脱这种情况的建议或文档(幸运的是我确实有相关文件系统的备份,所以最坏的情况可能会重新格式化和恢复)
似乎btrfs check --repair只是一遍又一遍地循环打印相同的错误,而没有实际修复它。
有没有办法修复现有的文件系统,或者我最好重新创建它并恢复备份?
今天,我的桌面通知我我的 /-文件系统已“满”。所以一开始我对文件、包和旧快照做了一些清理。
然而,当我删除前一个时,我注意到使用该工具baobab我只有 50GB 的空间(参见屏幕截图)。我的df -alh命令给我的结果是我的大小是 140G,命令btrfs filesystem df /给我的结果是 125G。如果我检查分区大小,cfdisk我得到的结果是,如果有 139,7G(也就是说 140G)可用,对应于 df -alh 命令。但是我不明白为什么 btrfs 和 baobab 给我不同的结果。
截图差异大小输出
- 编辑 -
$sudo btrfs fi usage /
Overall:
Device size: 139.70GiB
Device allocated: 136.70GiB
Device unallocated: 3.00GiB
Device missing: 0.00B
Used: 133.78GiB
Free (estimated): 3.63GiB (min: 2.13GiB)
Data ratio: 1.00
Metadata ratio: 2.00
Global reserve: 308.56MiB (used: 0.00B)
Data,single: Size:125.68GiB, Used:125.05GiB (99.50%)
/dev/sda1 125.68GiB
Metadata,DUP: Size:5.50GiB, Used:4.37GiB (79.38%)
/dev/sda1 11.00GiB …Run Code Online (Sandbox Code Playgroud) 在新硬盘上,我创建了一个包含三个分区的 GPT 分区表:
/dev/sdd1 256M for /boot
/dev/sdd2 8G for swap
/dev/sdd3 ~1T for /
Run Code Online (Sandbox Code Playgroud)
然后,我不小心用 BtrFS 格式化了原始设备 /dev/sdd。我想:没问题 - 无论如何都是新磁盘。我重新创建了分区表,准备了交换空间,现在用 BtrFS 格式化了 /dev/sdd3。引导分区尚未使用。当 BtrFS 证明对我来说稳定时,我会将该磁盘设为我的主引导磁盘,并将我以前的 LVM 卷合并到 BtrFS 池中 - 但现在这无关紧要。我将所有数据分区同步到 BtrFS 分区上的子卷,配置内核和 grub 并重新启动。一切都很好,工作正常,并且:哇,速度更快。
但是每次 BtrFS progs 扫描 BtrFS 卷时,他们仍然会看到 /dev/sdd 卷,我在重新分区之前不小心格式化了该卷。我如何解决它?现在似乎没有受到伤害,但我不希望任何实用程序仅仅因为它在那里看到 BtrFS 就偶然尝试摆弄 /dev/sdd ......
我已经建立了一个复杂的备份方案,包括每小时、每天、每周、每月的备份,几乎不占用设备上的额外空间(感谢 btrfs 牛文件系统的荣耀)。
但不幸的是,我用老式的方式用完了空间(通过向它复制很多东西)。
现在删除一些东西是没有用的,因为它存在于所有的快照中。为了释放磁盘空间,我必须删除所有快照,因为文件首先被复制到设备上。我不想那样做,因为
rm -f那么如何告诉 btrfs 在所有快照中删除单个文件?实际上,这意味着将一些内部参考计数器设置为零,以便可以释放空间。
如果 btrfs 工具本身无法做到这一点(这有点短视),我也很高兴任何第三方工具可以简化在所有快照中搜索、挂载和删除文件的任务.
我的 Kubuntu(安装在 下/)的根文件系统是 Btrfs。我不用-o discard作安装选项。这意味着我需要fstrim按需运行。
过去我遇到了这个问题:btrfs, no diskspace left。我注意到fstrim -v /几乎没有任何空间被修剪。我的解决方案是btrfs balance start /在fstrim. 这是我在那里回答的要点。
今天不一样了。可能是我维护太晚了。这是发生的事情:
# fstrim -v /
/: 24 KiB (24576 bytes) trimmed
# btrfs balance start /
ERROR: error during balancing '/': No space left on device
Run Code Online (Sandbox Code Playgroud)
我删除了几个子卷(快照),btrfs subvolume delete …但没有帮助。我不太记得细节,但我认为以前我可以运行,btrfs balance …因为初步fstrim修剪了至少几个 MiB,不像今天那样小到 24 KiB。现在,这似乎是一种第 22 种情况,其中fstrim或btrfs balance …
我一直在尝试带有 SSD 驱动器的 Btrfs,并且喜欢在 fstab 中设置的压缩选项。
但是,这仅适用于在我安装操作系统并修改 fstab 文件后创建的文件。
我想要的是将压缩应用于系统上的所有文件,看看它是否可以改善启动时间和应用程序启动时间。
有谁知道我可以将更改应用于安装前或安装后的所有文件的方法吗?
我有 Fedora 20,当我安装它时,我选择使用 btrfs 作为文件系统,原因有很多,但主要是为了有可用的快照。
但我似乎无法创建/. 我可以像这样对我的主文件夹(也是 btrfs)btrfs subvolume snapshot /home/ /snap/home进行快照,但是当我尝试/通过编写btrfs subvolume snapshot / /snap它来进行快照时只输出ERROR: incorrect snapshot name ('/').
我确定 / 是 btrfs。

列出子卷输出:
# btrfs subvolume list /
ID 256 gen 9562 top level 5 path home
ID 258 gen 9562 top level 5 path root
ID 306 gen 9517 top level 258 path snap/home/2014-08-15_00:44:00
Run Code Online (Sandbox Code Playgroud)
是否无法对根文件夹进行快照,即使它使用的是 btrfs?
是否可以自动计算写入硬盘的每个文件的校验和?我的操作系统是 Linux。我读过 btrfs 为文件存储某种校验和。有可能转储这些校验和吗?其他文件系统呢?
btrfs在阅读文档并在本地系统上进行实验后,我对子卷很陌生,并且对子卷感到困惑。我有一个带有btrfs根分区的 Linux Mint 系统。Mint 方便地包含一个有助于自动化定期快照的工具。我可以轻松列出它制作和保存的内容。
$ sudo btrfs subvolume list /
ID 257 gen 52540 top level 5 path @
ID 258 gen 52540 top level 5 path @home
ID 283 gen 52467 top level 5 path timeshift-btrfs/snapshots/2019-01-15_02-00-51/@
ID 286 gen 50026 top level 5 path timeshift-btrfs/snapshots/2019-01-16_02-00-01/@
ID 288 gen 50026 top level 5 path timeshift-btrfs/snapshots/2019-01-17_02-00-01/@
ID 289 gen 50026 top level 5 path timeshift-btrfs/snapshots/2019-01-18_02-00-01/@
ID 291 gen 50409 top level 5 path timeshift-btrfs/snapshots/2019-01-19_02-00-01/@
Run Code Online (Sandbox Code Playgroud)
然而,根据文档,我了解到可以浏览快照,它们的完整树就像主文件树一样公开,显示为应用程序的目录。例如,我可以将单个文件从快照复制到已安装的顶级卷。也就是说,从应用程序的角度来看,制作快照很像原子的递归副本。
/然而,我在或 …
我们的生产容器崩溃了,因为它的 LXC 存储池空间不足。
这是dh -h从容器内部:
Filesystem Size Used Avail Use% Mounted on
/dev/loop0 82G 78G 2.0G 98% /
Run Code Online (Sandbox Code Playgroud)
这是来自主机系统的相同挂载:
/dev/loop0 82G 78G 2.0G 98% /var/lib/lxd/storage-pools/default
Run Code Online (Sandbox Code Playgroud)
我记得一年前当我设置它时,它问我 80GB 是否适合听起来不熟悉的东西,并且因为它没有说“容器磁盘大小”并说其他的东西,我只是想我最好相信默认值选项。现在我知道这是磁盘空间限制。我现在怎样才能增加这个限制?
此刻,我只是紧急清理了一些空间。主机实际上有数 TB 的磁盘空间。
PS 很抱歉抱怨,但 LXC 的文档是我见过的最糟糕的文档之一。对于像我这样的用户来说,这没有意义。
PPS 我忘了我实际上使用 LXD,呵呵。我打字lxc做任何事情的事实让我感到困惑。
更新: 直觉上,我认为这个命令可以调整存储池的大小:
# lxc storage set default size 200GB
Run Code Online (Sandbox Code Playgroud)
但它失败了:
Error: The [size] properties cannot be changed for "btrfs" storage pools
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
btrfs ×13
linux ×10
filesystems ×4
snapshot ×2
ssd ×2
checksum ×1
compression ×1
fedora ×1
fstab ×1
gpt ×1
grub ×1
hashing ×1
installation ×1
lxc ×1
lxd ×1
partitioning ×1
resizing ×1
trim ×1
ubuntu ×1