为了在 NixOS 上恢复 /home 的 BTRFS 快照,Wiki 表示首先要卸载 /home。
“此操作必须卸载 home” https://nixos.wiki/wiki/Btrfs
所以我的问题是如何做到这一点?我必须启动到不同的系统吗?
也许有一种更简单的方法来恢复家庭快照?
为了在 NixOS 上恢复 /home 的 BTRFS 快照,Wiki 表示首先要卸载 /home。
“此操作必须卸载 home” https://nixos.wiki/wiki/Btrfs
所以我的问题是如何做到这一点?我必须启动到不同的系统吗?
也许有一种更简单的方法来恢复家庭快照?
我第一次敢于在我的 NAS 中格式化 18TB 磁盘,作为 btrfs。所以我有一些问题和担心,我希望我们的社区能够回答。
文件系统将在客户端计算机上与 smbd 一起使用。这是否遗漏了 btrfs 的一些重要功能?(显然 root 可以通过 ssh 访问 NAS 以在 btrfs 文件系统上进行操作)。
我听说它是一个版本控制文件系统。想到 Git。如果我删除了一个文件,我能 100% 地再次找到它吗?
我听说即使所有文件的累积大小为 5TB,由于版本控制,18TB 的可用空间很快就会用完,并且需要 root 命令来释放它(如果我理解正确的话,可能是通过删除以前的快照进行压缩) ). 这适用吗?现在除了文件中的实际数据,还有什么占用了大量空间?这个额外的东西包含什么信息?在空间有限的时候,现在是否可以轻松地完全删除与文件实际数据无关的任何信息?
为什么“要擦洗的总数”比“分配的设备”大很多。
29.1TiB与21.24TiB是一个巨大的差异。
设置:我有一个 btrfs RAID 阵列。由于转换不完全,它具有 RAID1 和 RAID5 的混合数据块。但正如我所读到的,这并没有什么坏处。
btrfs f u -T .
Overall:
Device size: 54.57TiB
Device allocated: 21.24TiB
Device unallocated: 33.33TiB
Device missing: 0.00B
Used: 20.52TiB
Free (estimated): 31.00TiB (min: 8.99TiB)
Data ratio: 1.10
Metadata ratio: 4.00
Global reserve: 512.00MiB (used: 64.00KiB)
btrfs scrub status .
UUID: yaya
Scrub started: Sun Apr 3 01:15:01 2022
Status: running
Duration: 55:56:56
Time left: 12:46:52
ETA: Tue Apr 5 21:58:54 2022
Total to scrub: 29.10TiB
Bytes scrubbed: 23.69TiB
Rate: 123.33MiB/s
Error summary: no errors found
btrfs fi df .
Data, RAID1: total=10.58TiB, used=10.21TiB
Data, RAID5: total=8.68TiB, used=8.58TiB
System, RAID1C4: total=32.00MiB, used=2.42MiB
Metadata, RAID1C4: total=23.00GiB, used=22.02GiB
GlobalReserve, single: total=512.00MiB, used=0.00B
Ubuntu 20.04 LTS
Versions: btrfs-progs v5.4.1
Kernel: 5.13.0-39-generic #44~20.04.1-Ubuntu SMP
我的 btrfs 文件系统以某种方式损坏(父 transid,内部错误,...)。我尝试了修复选项,但我认为某些文件系统现在只是搞砸了。btrfs 卷用于备份。因此,丢失一些备份并不是什么大问题。但我只想让文件系统恢复健康状态。
如何?
root@openmediavault:/home/christian# btrfs check /dev/sdf
Opening filesystem to check...
Checking filesystem on /dev/sdf
UUID: dc7ca9ad-6af0-47e9-9c3a-860127d2c362
[1/7] checking root items
[2/7] checking extents
ref mismatch on [739855515648 16384] extent item 0, found 1
tree backref 739855515648 parent 2 root 2 not found in extent tree
backpointer mismatch on [739855515648 16384]
...
ref mismatch on [1407768510464 16384] extent item 1, found 0
backref 1407768510464 root 2 not referenced back 0x5642911036f0
incorrect global backref count on 1407768510464 found 1 wanted 0
backpointer mismatch on [1407768510464 16384]
owner ref check failed [1407768510464 16384]
ERROR: errors found in extent allocation tree or chunk allocation
[3/7] checking free space cache
cache and super generation don't match, space cache will be invalidated
[4/7] checking fs roots
更新
root@openmediavault:/home/christian# btrfs rescue super-recover /dev/sdf
All supers are valid, no need to recover
root@openmediavault:/home/christian# btrfs rescue zero-log /dev/sdf
Clearing log on /dev/sdf, previous log_root 0, level 0
Failed to find [1407768215552, 168, 16384]
btrfs unable to find ref byte nr 1407768248320 parent 0 root 2 owner 0 offset 0
transaction.c:195: btrfs_commit_transaction: BUG_ON `ret` triggered, value -5
btrfs(+0x3b748)[0x5588027c3748]
btrfs(btrfs_commit_transaction+0x12a)[0x5588027c3bcc]
btrfs(+0x5ae38)[0x5588027e2e38]
btrfs(main+0x1f3)[0x55880279be63]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xeb)[0x7f0ef5be609b]
btrfs(_start+0x2a)[0x55880279beaa]
Abgebrochen
如果我有两个带有 btrfs 的单独 USB 硬盘(单模,无 DUP 或 RAID)并将文件从一个硬盘复制到另一个硬盘,btrfs 是否确保复制的文件仍然与原始文件相同,基于其 btrfs 文件校验和?
所以我可以放心,如果将一堆文件从一个 btrfs HDD 复制到另一个 btrfs HDD 时没有报错,它们都可以吗?
请注意,我不确定例如“cp”命令本身是否会进行一些基本检查,以确保在复制过程中没有任何变化,无论是 RAM 错误还是 USB 行为不端或其他原因,在复制过程中,有一点只是因为某种原因而被翻转或其他。我在其他地方了解到,例如 scp(通过网络复制文件)会进行此类内部检查,但如果 btrfs 也自动执行此操作,那么这是一个额外的保证。
这意味着我不必手动将复制文件的 md5 或 sha256 校验和与原始文件进行比较,以确保它们仍然相同,因为 btrfs 已经自动使用它自己的校验和?
我们的生产容器崩溃了,因为它的 LXC 存储池空间不足。
这是dh -h
从容器内部:
Filesystem Size Used Avail Use% Mounted on
/dev/loop0 82G 78G 2.0G 98% /
这里来自主机系统的相同挂载:
/dev/loop0 82G 78G 2.0G 98% /var/lib/lxd/storage-pools/default
我记得一年前当我设置这个时,它问我 80GB 是否足够用于听起来不熟悉的东西,因为它没有说“容器磁盘大小”并说其他东西,我只是觉得我最好相信默认值选项。现在我知道这是磁盘空间限制。我现在如何提高这个限制?
此刻,我只是紧急清理了一些空间。主机实际上有 TB 的磁盘空间。
PS 很抱歉抱怨,但 LXC 的文档是我见过的最糟糕的文档之一。对于像我这样的用户来说,这没有任何意义。
PPS 我忘了我实际上使用的是 LXD,doh。lxc
我打字做任何事情的事实让我感到困惑。
更新: 直观地说,我认为这个命令可以调整存储池的大小:
# lxc storage set default size 200GB
但它失败了:
Error: The [size] properties cannot be changed for "btrfs" storage pools
有任何想法吗?
我有一台 openSUSE 计算机,它很早就开始使用 BtrFS(比如 Leap 42.2)。在过去的某个时刻,/tmp 子卷已满(一个大文件),我无法恢复空间,直到重新启动(rm
触发了一个No space left on device
)。然后一切看起来都很好至少一年。
但是最近(同时在 Leap 15.1)BtrFS 又满了,我不知道该怎么办:我有很多这样的快照:
# ls -l /.snapshots/
total 4
drwxr-xr-x 1 root root 32 Dec 18 2015 1
drwxr-xr-x 1 root root 32 May 14 09:45 1820
drwxr-xr-x 1 root root 66 May 14 09:46 1821
...
drwxr-xr-x 1 root root 32 Aug 8 08:08 1926
drwxr-xr-x 1 root root 38 Aug 8 08:09 1927
drwxr-xr-x 1 root root 38 Aug 8 08:12 1928
在成功检查了所有块的校验和(没有问题)后,我开始“平衡”,希望出现一些可用空间。但平衡似乎永远不会结束,所以我试图中止它。等待至少 15 分钟平衡中止后,我重新启动计算机尝试其他操作。当时文件系统已满 99%。
我想我会使用清理最旧的快照 ( 1
) rm -rf /.snapshots/1
。不幸的是,完成后,必要的程序/usr
消失了,我的系统变得无法启动!
所以我的问题是:这是预期的行为,还是我做错了什么?如果我做错了什么,删除旧快照的正确步骤是什么?