这是最近的 linux 内核的假设设置:
/dev/sda1 is formatted as btrfs
Run Code Online (Sandbox Code Playgroud)
然后我运行以下命令在 /dev/sda1 的根目录上创建两个子卷:
$ mount /dev/sda1 /mnt
$ btrfs subvolume create /mnt/a
$ btrfs subvolume create /mnt/b
$ umount /mnt
Run Code Online (Sandbox Code Playgroud)
现在我希望在两个不同的挂载点上同时挂载这两个子卷:
$ mount -o subvol=a /dev/sda1 /a
$ mount -o subvol=b /dev/sda1 /b
Run Code Online (Sandbox Code Playgroud)
这就是问题所在。我用一个文件作为块设备(使用循环)尝试了这个,它工作正常(至少对于每个文件中的两个文件)。但是,在安装了一个完整的系统后,将根目录放在一个子卷中,将主目录放在另一个子卷中,在启动时都挂载,我收到一个错误,告诉我底层设备是“写保护的”,并且第一次尝试读取主目录目录内容导致内核崩溃。
我想知道我想要做什么(使用不同的挂载选项多次挂载一个块设备)实际上是否被 btrfs 或 os.
目前我有一个 btrfs 挂载点,其结构如下:#
/mountpoint/month/day/hourAs24/
每个叶目录包含 5,000 到 20,000 个小文件。我在那里保存了两个月的文件。每天我都会使用命令删除超过 60 天的目录
rm -R /mountpoint/month/day/
此命令需要很长时间才能运行,并且该命令运行时服务器上的负载非常高。
/mountpoint/month/每天在下面创建 btrfs 子卷,然后在一个命令中清除子卷会更好吗?
有没有其他快速和轻量级的解决方案可以在单个命令中删除一个 btrfs 目录下的文件?
编辑:
澄清情况。在结构中,文件夹month,day和hourAs24是由当前日期时间的相应值替换的变量。
解决后编辑: 它在我的测试机器上运行顺利。并且以下所有作品都在安装了挂载点的情况下生效!首先,我为每个月创建普通目录
mkdir /mountpoint/month
然后我为每月的每一天创建 btrfs 子卷
btrfs subvolume create /mountpoint/month/day
然后我为一天中的每个小时创建普通目录
mkdir /mountpoint/month/day/hourAs24
60 天后,我可以轻松清除当天的目录
btrfs subvolume delete /mountpoint/month/day
(现在我必须等待 60 天才能看到生产服务器上的性能)
我计划在 50 TB RAID6 阵列上使用 btrfs,并且我想启用 lzo 压缩。
这适用于生物信息学设置,其中会在大型 (1 TB - 20 TB) 文件中进行大量搜索。(该软件仅获取分散在文件中的小块数据)。
让我担心的是,我不明白如何在像 btrfs 这样的压缩文件系统上执行搜索。文件需要从头解压到抢手的位置吗?这将对我的设置产生巨大的负面影响。
或者一个更普遍的问题:文件大小的搜索时间比例是否与非压缩文件系统相同,还是变得更糟,例如 O(file_length)
我正在使用 BTRFS 从 2 个磁盘创建 RAID0 卷。两者都在一个 AWS EC2 实例上,每个实例都有 30 GB 的可用空间。我用来创建文件系统的命令是:btrfs -d raid0 -L MYLABEL /dev/xvdf /dev/xvdg.
现在Ubuntu告诉我磁盘空间已满,就像BTRFS一样:
root@host:/var/docker-apps/prometheus# btrfs balance start -dconvert=raid0 .
ERROR: error during balancing '.': No space left on device
There may be more info in syslog - try dmesg | tail
root@host:/var/docker-apps/prometheus#
Run Code Online (Sandbox Code Playgroud)
有趣的是,当我看到btrfs filesystem usage我得到这个:
root@host:/var/docker-apps/prometheus# btrfs filesystem usage .
Overall:
Device size: 60.00GiB
Device allocated: 60.00GiB
Device unallocated: 2.00MiB
Device missing: 0.00B
Used: 25.26GiB
Free (estimated): 34.22GiB (min: …Run Code Online (Sandbox Code Playgroud) 我正在准备一台 VM 机器(在 Proxmox 上运行)来在 Ubuntu 16.04 LTS 上运行 postgresql 9.6。这个 postgres 将用于处理一家小公司的 Jira/FisheEye/Confluence 数据库。通常我们同时有几个用户,所以我们不需要调整它以获得极端的性能/可扩展性。
嗯,情况是,我们在服务器上使用 BTRFS 来帮助我们处理在必要时向虚拟机添加额外空间的问题,此外我们还启用了 lzo 压缩。此外,我们使用 btrok 来处理 BTRFS 子卷到另一台机器的备份。
我怀疑使用 BTRFS 处理 postgresql 数据库文件是否是一个好主意,因为我们在需要扩展虚拟硬盘空间的情况下会非常有帮助,但我读到了有关 postgresql 性能比 BTRFS 差的信息(在特殊情况下) datacow 未被禁用。
有人有这种情况的经验吗?
我有一个 Rocks 集群系统,带有 NAS,在 RAID 10 配置中使用 btrfs 文件系统。最近,我们一直面临“设备上没有剩余空间”错误,我最终发现元数据几乎完全用完。所以我希望执行平衡操作来解决这个问题。
我不清楚的是,在进行平衡操作时,我们的用户是否可以继续工作并访问他们在 nas 上的目录?平衡手册指出:
“文件系统的磁盘状态始终保持一致,因此意外中断(例如系统崩溃、重新启动)不会损坏文件系统。平衡操作的进度会暂时存储,并将在挂载时恢复,除非挂载选项指定了skip_balance。”
这让我认为数据块只有在该块的平衡完成后才会被重新分配,但我在任何地方都没有找到我的问题的明确答案:用户继续工作、在 nas 上读取/写入数据是否安全在平衡操作期间,或者是否有必要在此过程中使系统离线,这对于我们的 TB 数据可能需要数小时或数天的时间?
network-attached-storage outofmemoryerror memory-usage btrfs
我有一个 btrfs 阵列,它由 raid 1 中的两个 2TB 磁盘组成。我的空间不足,我想添加两个闲置的 3TB 磁盘。最终设置将是 2x2TB+2x3TB 驱动器。一个驱动器故障冗余对我来说就足够了(数据也备份到了其他地方)。
我不确定如何继续:btrfs wiki清楚地说明了如何添加新设备,但我不确定这最终会如何看待可用磁盘空间。我会得到:
根据一些研究(例如这个答案),我认为结果应该是 2,这就是我想要的。这样对吗?
另一种可能性是我切换到 raid 10 设置,如果这对不同大小的磁盘是可能的。如果这是可取的,我应该如何在不临时将数据托管在外部存储上的情况下这样做?
运行btrfs check显示几个类似这样的错误(总共 13 个):
checksum verify failed on 369098752 wanted 0x0000000000000000000000000000000000000000000000000000000000000000 found 0x6290e6592047ec80140a1252d31a8ba8a33a34cf578b5c8c4a081706b9416fa6
Run Code Online (Sandbox Code Playgroud)
所有想要的校验和都是零,这显然很可疑。
运行后,btrfs scrub我在元数据中纠正了 13 个错误,在数据块中纠正了多个不可纠正的错误(通过从备份恢复受影响的文件来修复)。
但是,btrfs check再次运行会显示相同的 13 个校验和错误。
我有两个问题:错误中的数字指的是什么?所有提及此问题的搜索结果都没有答案。我的猜测是它是一个逻辑地址,但是btrfs inspect-internal logical-resolve number /path给出了ERROR: logical ino ioctl: No such file or directory,而且它显然也不是一个索引节点(dmesg 实际上明确地将这些数字称为逻辑地址,指向元数据叶子,但它没有指定哪种类型)。
第二个问题,我可以对这些校验和做什么?所有 btrfs 问题都可以通过运行立即得到解答,btrfs check --init-csum-tree但我的理解是这将完全重置 csum 树,我想首先了解问题到底出在哪里。
文件系统信息:
[root@ls-fedora ArchiMedia]# btrfs filesystem usage .
Overall:
Device size: 27.28TiB
Device allocated: 12.02TiB
Device unallocated: 15.27TiB
Device missing: 0.00B
Used: 11.84TiB
Free (estimated): 15.44TiB …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 KVM 并在 linux 服务器上设置 linux,所以我可以
我正在考虑btrfs用作文件系统,因为它是单个 ssd 磁盘且没有 RAID。
以下想法:
还是我应该反过来做?
我有 2 个数据源。一种是 btrfs(raid),一种是简单的 ext4 分区。那些应该透明地显示为一个。这是一个简单的只读示例,但是lower/upper/workdir 版本产生了同样的问题,btrfs 为upper,ext4 为lower。
手动安装:
mount -t overlay overlay -o lowerdir=/mnt/raid/folder1/:/mnt/ext4/folder1 -o comment=merge -o nfs_export=on /data/merged
Run Code Online (Sandbox Code Playgroud)
fstab 挂载:
overlay /data/merged overlay defaults,lowerdir=/mnt/raid/folder1/:/mnt/ext4/folder1,comment=merge,nfs_export=on 0 0
Run Code Online (Sandbox Code Playgroud)
这是我的 nfs 导出:
/data/merged 192.168.0.0/255.255.255.0(ro,fsid=1,async,insecure,crossmnt)
Run Code Online (Sandbox Code Playgroud)
exportfs -ra 产生: exportfs: /data/merged does not support NFS export
我的配置:Ubuntu 18.04 LTS with HWE kernel 4.18.0-13-generic 这是我的主要配置来源:https ://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt
也许我错过了一些 NFSv4 的东西(这是 nfs 导出overlayfs 所需要的)?
编辑:根据要求,我为 sourcecs 安装:
UUID=d138b8fa-83e1-4df7-80dc-c1ed7d866f77 /mnt/raid btrfs defaults 0 2
UUID=6bb8f391-0872-40cf-8aff-8bdb32632098 /mnt/ext4 ext4 errors=remount-ro 0 2
Run Code Online (Sandbox Code Playgroud)
编辑2:
grep -H . /sys/module/overlay/parameters/* …Run Code Online (Sandbox Code Playgroud) 我有一台运行 Ubuntu(服务器版)的服务器,它的主要工作是通过 FTP(vsftpd)和 AFP(netatalk)提供文件。我的 /srv 目录开始填满,我需要添加更多硬盘驱动器。因为它的技术对于我的需要来说已经过时了,所以不考虑 RAID。
对于它的价值,现在,我应该选择更成熟的 ZFS,使用内核模块或 FUSE 扩展,还是尝试使用更新但更像 Linux 的 btrfs?在这种情况下,每种方法的优缺点是什么?
TIA。
btrfs ×12
filesystems ×3
raid ×2
ubuntu ×2
zfs ×2
compression ×1
file-server ×1
linux ×1
memory-usage ×1
nfs ×1
overlayfs ×1
performance ×1
postgresql ×1
raid1 ×1
raid10 ×1
remove ×1
storage ×1
ubuntu-16.04 ×1