对于我尝试过的所有 ZFS-on-Linux 版本,zfs list用于列出文件系统或卷 ( zfs list -r -t snapshot -H -o name pool/filesystem) 的所有快照总是比 运行时间多几个数量级ls .zfs/snapshot,这是直接的:
$ time ls -1 /srv/vz/subvol-300-disk-1/.zfs/snapshot
[list of 1797 snapshots here]
real 0m0.023s
user 0m0.008s
sys 0m0.014s
# time zfs list -r -t snapshot -H -o name vz/subvol-300-disk-1
[same list of 1797 snapshots]
real 1m23.092s
user 0m0.110s
sys 0m0.758s
Run Code Online (Sandbox Code Playgroud)
此错误是否特定于 ZFS-on-Linux?
任何拥有 Solaris 或 FreeBSD ZFS 机器的人都可以执行类似的测试(在旋转硬盘上有数百个快照的文件系统上)吗?
是否有一种解决方法可以快速获取一个卷的快照列表,该卷本质上没有.zfs目录?
我已经在内核 2.6.32-43-pve x86_64 (Proxmox) 上使用 …
我对zfsonlinux很陌生。我刚刚成功建立了一个全新的服务器,在 ZFS 上有一个 Debian ROOT。一切正常,但我遇到了热备用和更换磁盘的问题。
这是我的游泳池:
NAME STATE READ WRITE CKSUM
mpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
ata-ST1XXXXXXXXXXA-part1 ONLINE 0 0 0
ata-ST1XXXXXXXXXXB-part1 ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
ata-ST1XXXXXXXXXXC-part1 ONLINE 0 0 0
ata-ST1XXXXXXXXXXD-part1 ONLINE 0 0 0
spares
ata-ST1XXXXXXXXXXE-part1 AVAIL
ata-ST1XXXXXXXXXXF-part1 AVAIL
Run Code Online (Sandbox Code Playgroud)
现在,我可以开始真正的乐趣了。拉盘!我现在正在拔下磁盘 C。我有一个工作池,但降级(如预期):
NAME STATE READ WRITE CKSUM
mpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
ata-ST1XXXXXXXXXXA-part1 ONLINE 0 0 0
ata-ST1XXXXXXXXXXB-part1 ONLINE 0 …Run Code Online (Sandbox Code Playgroud) 我已经为 PostgreSQL 数据库设置了 ZFS RAID0。存储和实例位于 AWS EC2 和 EBS 卷中。
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
pgpool 479G 289G 190G - 70% 60% 1.00x ONLINE -
xvdf 59.9G 36.6G 23.3G - 71% 61%
xvdg 59.9G 34.7G 25.2G - 70% 57%
xvdh 59.9G 35.7G 24.2G - 71% 59%
xvdi 59.9G 35.7G 24.2G - 71% 59%
xvdj 59.9G 36.3G 23.6G - 71% 60%
xvdk 59.9G 36.5G 23.4G - 71% 60%
xvdl 59.9G 36.6G 23.3G - 71% 61%
xvdm …Run Code Online (Sandbox Code Playgroud) ubuntu 13.10使用sudo apt-get upgrade并重新启动升级我的服务器后,我的 zpool 不会显示。
messier@ANDERSON:~$ sudo zpool status
no pools available
messier@ANDERSON:~$ sudo zpool import
zpool: ../../lib/libzfs/libzfs_import.c:356: Assertion `nvlist_lookup_uint64(zhp->zpool_config, ZPOOL_CONFIG_POOL_GUID, &theguid) == 0' failed.
messier@ANDERSON:~$
Run Code Online (Sandbox Code Playgroud)
我查看了 linux github 上的 zfs,我找到了 CentOS 的修复程序,即删除旧的内核模块,然后重新安装软件以获取新的内核模块。
$ find /lib/modules/$(uname -r)/extra -name "splat.ko" -or -name "zcommon.ko" -or -name "zpios.ko" -or -name "spl.ko" -or -name "zavl.ko" -or -name "zfs.ko" -or -name "znvpair.ko" -or -name "zunicode.ko" | xargs rm -f
$ find /lib/modules/$(uname -r)/weak-updates -name "splat.ko" -or -name "zcommon.ko" -or …Run Code Online (Sandbox Code Playgroud) 我有一个用户根据 ZFS 达到他们的配额。但是,我无法找到他们如何使用所有空间。这个文件系统没有后代文件系统,根据手册页the userquota space calculation does not include space that is used by descendent datasets, such as snapshots and clones.为什么 zfs 和 find&du 有如此大的分歧?
# zfs get -H userquota@user1 zpool/zfs1 && zfs get -H userused@user1 zppol/zfs1
zpool/zfs1 userquota@user1 20G local
zpool/zfs1 userused@user1 20.0G local
# find $(zfs get -H -o value mountpoint zpool/zfs1) -user user1 -print0 | du -hc --files0-from=- | tail -n 1
5.9G total
Run Code Online (Sandbox Code Playgroud)
此外,我还有另一个用户似乎遇到了相反的问题。
# zfs get -H userquota@user2 zpool/zfs1 && zfs get -H …Run Code Online (Sandbox Code Playgroud) 我们的存储服务器有一些问题,就在我们有一个损坏的磁盘(WD 4TB RE SAS),尽管 raidcontroller(LSI MegaRAID 9271-8i)使磁盘保持在线(状态:ok)。只有媒体错误显示 1 个错误。我们决定保存并更换磁盘,在重新同步第二个和第三个磁盘时标记为(重新同步),尽管只有一个磁盘显示 1 个读取错误。今天 resilver 完成了(没有损坏,一切都好),我开始擦洗并遇到了这个:
zpool status
pool: data
state: DEGRADED
status: One or more devices could not be used because the label is missing or
invalid. Sufficient replicas exist for the pool to continue
functioning in a degraded state.
action: Replace the device using 'zpool replace'.
see: http://zfsonlinux.org/msg/ZFS-8000-4J
scan: scrub in progress since Thu Jan 14 10:50:00 2016
2.71T scanned out of 111T at 718M/s, 43h59m to go
0 …Run Code Online (Sandbox Code Playgroud) 据我所知,ZFS 作为文件系统在每次访问数据期间检查数据错误。
因此,我认为它实际上在发送数据之前执行了类似清理的操作,从而确保了发送数据的完整性。
我的问题是:真的吗?如果不是的话,我可以在 zfs 发送关于该特定数据集之前执行 zfs 清理获得什么额外的好处。
考虑以下命令和输出:
zfs send -Pvi \
tank/vms/langara@zfsnap-2016-05-11_00.00.00--1w \
tank/vms/langara@zfsnap-2016-05-13_00.00.00--1w \
| dd > /dev/null
Run Code Online (Sandbox Code Playgroud)
运行 1:
incremental zfsnap-2016-05-11_00.00.00--1w tank/vms/langara@zfsnap-2016-05-13_00.00.00--1w 4903284160
size 4903284160
17:29:42 1244483472 tank/vms/langara@zfsnap-2016-05-13_00.00.00--1w
17:29:43 2487508120 tank/vms/langara@zfsnap-2016-05-13_00.00.00--1w
17:29:44 3741453864 tank/vms/langara@zfsnap-2016-05-13_00.00.00--1w
9582310+895 records in
9582799+1 records out
4906393272 bytes (4.9 GB) copied, 3.94883 s, 1.2 GB/s
Run Code Online (Sandbox Code Playgroud)
运行 2:
incremental zfsnap-2016-05-11_00.00.00--1w tank/vms/langara@zfsnap-2016-05-13_00.00.00--1w 4903284160
size 4903284160
17:30:07 1209666712 tank/vms/langara@zfsnap-2016-05-13_00.00.00--1w
17:30:08 2411042632 tank/vms/langara@zfsnap-2016-05-13_00.00.00--1w
17:30:09 3632274072 tank/vms/langara@zfsnap-2016-05-13_00.00.00--1w
17:30:10 4853372344 tank/vms/langara@zfsnap-2016-05-13_00.00.00--1w
9582450+654 records in
9582799+1 records out
4906393272 bytes (4.9 GB) copied, 4.05346 s, 1.2 GB/s …Run Code Online (Sandbox Code Playgroud) 我已经使用 ZFS 在 Dell PowerEdge R720xd 上安装了 Ubuntu 18.04。ZFSmirror配置中有两个 1TB 引导驱动器。我按照Linux Wiki 上的ZFS 中的说明进行操作。
(注意:我的系统使用的是 LSI LSI00244 (9201-16i) 主机总线适配器 (HBA) 而不是板载 RAID 卡,因为 ZFS 和这个 RAID 卡不兼容。)
启动 Ubuntu 时,系统枚举驱动器大约需要 10 秒钟(有 14 个驱动器 - 两个用于操作系统,12 个用于稍后将在其他 zpool 中设置的数据存储)。但是,引导过程会在枚举驱动器之前尝试导入引导池。
BusyBox 错误消息在屏幕上闪过,它基本上说:
池导入失败。
在此 BusyBox shell 中手动导入池,然后键入
exit以继续引导过程。
如果我在该消息后等待几秒钟,我会看到列出了 14 个驱动器。
我zpool import rpool在 BusyBox 提示符下输入,它可以工作(用 确认zpool list),然后exit继续启动过程。(这会导致我的下一个问题,内核崩溃,但这是一个单独的问题。)
我尝试添加rootdelay=15启动选项,但这似乎不起作用,因为它似乎想在 ZFS 池导入后运行该延迟。
在尝试导入池之前,如何让引导过程等待设备出现?
我有一台我多年前建造的服务器,它运行起来像个冠军。但在过去的几个月里,它开始变得严重不稳定,没有明显的模式。我一直在调试它并更换零件无济于事。我已经更换了系统中我能想到的几乎所有东西,这可能是用于存储的保存驱动器的原因。
请注意,系统运行的是 CentOS 7.5。
症状是机器会自发地执行硬复位,就好像电源正在循环或突然断电一样。它可以每隔几天发生一次,有时一天发生两次。系统可以是空闲的,也可以是有负载的。没有模式。
除了基本的必需品,我已经删除了所有内容。请注意,我已替换:
主板、CPU、RAM 和 PSU。
如果任何 ram 棒有缺陷,我希望看到已更正/无法更正的 ECC 错误的日志,而我没有。如果是 CPU,我会期待一些更随机的东西,因为可能的内核恐慌有一些日志记录。我怀疑它可能是电源的故障并更换了它。问题仍然存在,所以我尝试更换主板。没变。
系统配置了两个处理器和 16 根相同的内存条,所以我试图卸下一个 CPU 和一半的内存,看看它是否崩溃,然后换另一套。症状没有变化。
我开始移除额外的组件,并达到了最低限度,症状没有变化。
我现在完全不知所措。除了系统中剩下的几个驱动器之外,我已经没有什么可以尝试替换案例本身的保存了。
什么可能导致我的服务器自行重置?我还能测试什么?故障真的来自其中一个驱动器吗?
目前系统规格如下:
基础组件:
- SuperMicro H8DG6-F (主板)
- 1x AMD Opteron 处理器 6328 (CPU)
- 16GB x 8海力士 DDR3 ECC HMT42GR7BMR4C-G7(内存)
贮存:
- 1x三星 SSD 850 PRO 128GB …
zfs ×10
zfsonlinux ×10
ubuntu ×2
boot ×1
debian ×1
linux ×1
postgresql ×1
raid ×1
ubuntu-18.04 ×1