我们想使用 XFS 来格式化服务器中的一些分区。高性能当然是我们的目标,但我们更喜欢稳定性。例如,如果发生断电,我们希望快速恢复 FS。在这种情况下,如果分区损坏并且不能再使用,这是不可接受的。我们可以更改 mkfs.xfs 的选项以提高稳定性吗?
有些人建议这样做:
mkfs.xfs –b size=4096 –s size=4096 /dev/sdx -f
Run Code Online (Sandbox Code Playgroud)
我的问题是:
块 4096 字节是否对性能来说太小了?如果我改进它,是否会影响稳定性?
扇区大小应该由低级块设备驱动程序考虑,为什么 XFS 也有“扇区大小”?如果系统是具有传统 512 字节扇区支持的 Linux,将其设置为 4096 字节有什么问题吗?
我的服务器上有 9 个分区格式化为 XFS。
当我尝试安装其中一个时,它失败了。其他人安装得很好。
root@fileserver2 # mount | grep xfs | head -1
/dev/sdb1 on /mnt/hdd1 type xfs (rw,noatime)
root@fileserver2 # mount -t xfs /dev/sdf3 /mnt/hdd3
mount: wrong fs type, bad option, bad superblock on /dev/sdf3,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so
root@fileserver2 # dmesg | tail -2
XFS (sdf3): bad magic number
XFS (sdf3): SB validate failed
Run Code Online (Sandbox Code Playgroud)
所以我尝试使用 xfs_repair -n …
我刚刚创建了一个运行RHEL7
以下命令的 Amazon AWS EC2 实例:
[root@ip-10-184-161-46 ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.0 (Maipo)
[root@ip-10-184-161-46 ~]#
Run Code Online (Sandbox Code Playgroud)
即使我选择了10GB
作为我的存储容量,无论出于何种原因,我只看到6GB
可供我立即使用的容量:
[root@ip-10-184-161-46 ~]# mount | grep xfs | grep -v selinux
/dev/xvda1 on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
[root@ip-10-184-161-46 ~]# df -h | grep xvda
/dev/xvda1 6.0G 2.2G 3.9G 37% /
[root@ip-10-184-161-46 ~]# fdisk -l /dev/xvda
Disk /dev/xvda: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size …
Run Code Online (Sandbox Code Playgroud) Ext3 和 Ext4 的默认日志提交间隔为 5 秒,可以通过 'commit' 挂载选项更改。
每当我使用 Ext3/4 在 Linux VM 中执行任何文件操作时,例如“echo test > my_new_file”(根据挂载选项,这可能只写入文件元数据,或者文件数据后跟其元数据,但这是一个单独的问题)
XFS 的默认日志提交间隔是多少?可以配置吗?
我找不到任何记录的 XFS 挂载选项。使用 XFS,我确实看到创建新文件后磁盘图标可能不会闪烁超过 10 秒。正如预期的那样,如果我在看到磁盘活动之前使内核崩溃,则在重新启动后 my_new_file 将不存在。此外,正如预期的那样,如果我在看到磁盘活动后使内核崩溃,这通常是 XFS 日志提交活动,因此如果此时内核崩溃,重新启动后 my_new_file 将存在,但将为空。
我在创建系统时使用默认参数创建了一个 XFS 文件系统。现在在看的输出xfs_info
,它显示为0的值sunit
和swidth
。在这种情况下,我似乎无法解释 0 的含义。(的讨论sunit
和swidth
我都发现都集中在这些参数设置正确的值,而不是将它们设置为0)
# xfs_info .
meta-data=/dev/mapper/centos-root isize=256 agcount=8, agsize=268435455 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=1927677952, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal bsize=4096 blocks=521728, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
Run Code Online (Sandbox Code Playgroud)
这必须是一个无知的问题,为此,我很抱歉,因为我是一个新手,XFS,但什么是0值的含义sunit
和swidth
?我如何才能找出 XFS 真正用于这些参数值的内容,以及这些值与适合我的 RAID 阵列的值之间的关系?(这是一个位于硬件 RAID 之上的 LVM 之上的 XFS 系统。)
我正在对基于SuperMicro E300-8D的小型服务器盒进行基准测试。我已经安装了带有最新更新的最新 CentOS 7.5、64GB DDR4-2100 RAM 和三星 970 EVO 1TB NVMe SSD。操作系统安装在 USB 记忆棒上的内部 USB 端口中,因此除了在我的基准测试期间,SSD 完全没有使用。
受ScyllaDB使用的基准测试方法的启发,我的测试目标是找到此 SSD 的最佳并发级别。为此,我使用了diskplorer,它在内部用于fio
探索并发与 IOPS 和延迟之间的关系。它会生成如下所示的方便图表。在所有情况下,我都使用 4K 随机读取工作负载。
问题是我得到的结果毫无意义。这是第一个结果:
/dev/nvme0n1
$ sudo ./diskplorer.py --device=/dev/nvme0n1 --filesize=256G
Run Code Online (Sandbox Code Playgroud)
这是太棒了!三星自己的规格表声称读取 IOPS 为 500K,20 次并发读取时,我得到了近 600K。右边的轴是以纳秒为单位的读取延迟,红线是平均延迟,误差线是 5% 和 95% 的延迟。所以看起来这个 SSD 的理想并发级别是大约 20 次并发读取,产生极好的延迟 < 100us。
那只是原始SSD。我会将 XFS 放在上面,它针对异步 I/O 进行了优化,而且我确信它不会增加任何显着的开销......
/dev/nvme0n1
$ sudo mkfs.xfs /dev/nvme0n1
$ sudo mount /dev/nvme0n1 /mnt
$ sudo ./diskplorer.py --mountpoint=/mnt --filesize=256G
Run Code Online (Sandbox Code Playgroud)
什么!?这是 …
我需要在一个驱动器上 chown 150 万个文件。我目前正在做:
sudo chown -R www-data:www-data /root-of-device
Run Code Online (Sandbox Code Playgroud)
但是运行需要很长时间。我想知道是否有某种超快的低级方式来 chown 驱动器上的每个文件。
我在小硬盘(/dev/sdb1,小于150G)上使用XFS并存储许多小文件(-32KB)。df -h 和 -i 显示它有可用空间。
# df-hv 已使用的文件系统大小 可用 使用% 安装于 /dev/sda3 127G 19G 102G 16% / tmpfs 16G 0 16G 0% /lib/init/rw udev 16G 168K 16G 1% /dev tmpfs 16G 0 16G 0% /dev/shm /dev/sda1 99M 20M 75M 21% /boot /dev/sdb1 136G 123G 14G 91% /mnt/sdb1 # df -iv 文件系统索引节点 IUsed IFree IUse% 挂载于 /dev/sda3 8421376 36199 8385177 1% / tmpfs 4126158 5 4126153 1% /lib/init/rw udev 4124934 671 4124263 1% /dev tmpfs 4126158 1 4126157 1% /dev/shm /dev/sda1 …
在linux xfs上解压7zip,里面有很多小文件,解压速度好慢。
我的测试系统环境。
大小文件创建脚本
#!/bin/bash
for i in {1..100000}
do
dd if=/dev/zero of=./dmp/dd$i.dmp bs=1K count=4
done
Run Code Online (Sandbox Code Playgroud)
好的。我在 dmp 目录中得到了 100,000 个 4KB 文件。然后我用xfs格式化/testfs。
测试
Compression Time on System1 :
# time 7za a dmp.7z ./dmp --> real 0m27.518s
Extraction Time on System1:
# time 7za x dmp.7z -o/testfs --> real 9m5.420s
- 7za use only single core.
- Dirent system call use most of the CPU time. …
Run Code Online (Sandbox Code Playgroud) 我即将将数据从一个 XFS 文件系统复制到另一个(较小的)XFS 文件系统。复制时可能会卸载文件系统。我不想担心 ACL、SELinux 上下文等,所以我正在查看 xfs_copy 和 xfsdump。
什么时候应该使用 xfs_copy 而不是 xfsdump,反之亦然?一个比另一个快吗?