问题标签 [zfs]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 复制到 linux 中的挂载点期间的 hang_task_timeout_secs 错误
我正在尝试将数据文件从我的 VM 复制到 NFS VM-ZFS 存储(两个 VM 可以相互通信)。在复制过程中有时我会遇到错误:
信息:任务 cp:阻塞超过 120 秒。“echo 0 > /proc/sys/kernel/hung_task_timeout_secs 禁用此消息”
我的虚拟机都挂了,我必须重新启动它们。如果我再次复制它就可以了。
我有大约 233 个数据文件要复制,并且一次又一次地重新启动 VM 变得困难。
我查看了互联网上给出的解决方案并将 vm.dirty_ratio 更改为 5 并将 vm.dirty_background_ratio 更改为 10 以解决但它不起作用。
我在虚拟机上运行这些虚拟机,并为其中一个分配了大约 17GB 的 RAM,而 NFS 虚拟机则分配了大约 6GB 的 RAM。
有什么技巧可以帮助我将这些文件复制到 NFS 而不会挂起我的虚拟机?
rsync - 带备份的 Btrfs 快照
有没有办法通过在第一次备份时复制整个磁盘来备份 btrfs 文件系统,然后复制快照文件而不是使用 rsync(或者这是一个坏主意)?
filesystems - 如何在 ZFS 中设置文件创建时间?
我刚刚有一个运行 ZFS 的 NAS,我想在将文件传输到其中时保留创建时间。linux/ext4(数据现在所在的位置)和 zfs 都存储创建时间或出生时间。在 zfs 的情况下,它甚至由 stat 命令报告。但我无法弄清楚如何设置文件的创建时间,以便它反映原始文件系统中的创建时间。与 ext4->ext4 传输不同,我可以为 debugfs 提供一个脚本来设置文件创建时间。
有没有类似于 ZFS 的 debugfs 的工具?
PS。为了更好地解释:
我有一个连接到 Ubuntu 14.04 笔记本电脑的 USB 驱动器。它拥有一个文件系统,我关心各个文件的创建日期(出生日期)。我经常使用基于 debugfs 的脚本来查阅这些创建时间戳,该脚本将其报告为 crtime。
我想将数据移动到运行 ZFS 的 NAS 盒中,但我知道的方法(scp -p -r、rsync -a 和 tar 以及我尝试过的其他方法)保留了修改时间,但没有保留创建时间。
如果我要迁移到另一个 ext4 文件系统,我会使用神奇的工具来解决问题
debugfs
。具体来说,我可以在源 fs(文件系统)上列出 (filename, crtime) 对,然后debugfs -w
在目标 fs 上使用以下形式读取脚本set_inode_field filename crtime <value>
我已经对此进行了测试,并且效果很好。
但我的目标 fs 不是 ext4 而是 ZFS,虽然
debugfs
在目标机器上运行,但在那里完全没用。它甚至不识别fs。另一个可以让您通过直接编辑 inode 来更改时间戳的调试工具是 fsdb;它也在目标机器上运行,但我似乎无法让它识别 ZFS 文件系统。卖给我 NAS 盒子的人告诉我,debugfs 和 fsdb 不适用于 ZFS 文件系统,但他们还没有找到等效的东西。所以,经过大量的谷歌搜索和尝试,我终于决定今天在这里发布一个问题,希望有人能给出答案。
我很惊讶这变得多么困难。从档案的角度来看,如何复制数据集以使所有时间戳都相同的问题似乎很自然。
zfs - 无法创建 zpool 一个或多个 vdev 引用同一设备,或者其中一个设备是活动 md 或 lvm 设备的一部分""
我正在尝试在新服务器上创建 zfs 池。操作系统是 CentOS 6.6。内核为 2.6.32-504.16.2.el6.x86_64
按设备字母:
zpool create -f 数据池 raidz2 sdb sdc sdd sde sdf sdg sdi sdh 缓存 sda -m /data
无法创建“数据池”:一个或多个 vdev 引用同一设备,或者其中一个设备是活动 md 或 lvm 设备的一部分
按磁盘路径
无法创建“数据池”:一个或多个 vdev 引用同一设备,或者其中一个设备是活动 md 或 lvm 设备的一部分
lsblk 的输出:
未安装多路径
我看不到什么可以使用我的磁盘。谁能指出我正确的方向?
我会提供更多信息(fdisk 输出和 /dev/disk/by-path/),但论坛抱怨它的代码太多。
谢谢!
rsync - FreeBSD监狱中的rsync:设置时间失败:不允许操作
我有一个“分区”ZFS 池安装到 /jails/www/usr/local/www/stuff 内的目录(由 nginx 提供服务),并且从该监狱内部,我已将该目录分配给特定用户。我有 rsync 定期从远程服务器更新该目录。文件同步正常,但存在持续错误:
我在这里想念什么?
unix - 以 root 身份挂载 GEOM_ELI 加密 ZFS 池
我有一个 3 磁盘 RAIDz1 池,在 GEOM_ELI 中使用 AES128 加密,自版本 8 以来我一直在 FreeNAS 中使用它。有很多 zpool 升级,总的来说,我对 ZFS 非常满意。
但是最近我对 FreeNAS 越来越失望。多年来没有修复的大部分错误。但总的来说,我坚持使用闪存驱动器作为他们的操作系统,尽管其中大部分是只读的。它仍然是单点故障,并且总是将启动时间延长几分钟。底线,我只想在这个池中使用 Vanilla FreeBSD。我正在寻找更多的灵活性,并且我希望通过这个很棒的操作系统来教育自己。
做一些更深入的研究,我发现了许多关于将 FreeBSD 天真地安装到 ZFS 卷并将其挂载为 / 的教程直到我做了更多的研究并找到了一篇关于将 zfs 加密卷挂载为 root 的文章。后来我发现 FreeBSD 10 在安装过程中会这样做,这至少可以说是很棒的。
我用 VMWare 工作站制作了一个虚拟机,带有三个 2TB 驱动器,作为物理磁盘通过,每一步都执行到 T,一切都运行良好。现在我更好地掌握了我正在执行的命令以及执行这些命令的原因,我想对已经存在的池执行此操作,其中已经有很多数据。
默认情况下,FreeNAS 在每个数据磁盘的前面创建一个 2GB 的 SWAP 分区。我删除了交换空间,并将其设置为每个驱动器上的 1.5GB 分区,剩余 512MB 用于交换。我遵循每一步,根据需要改变事情。(我有 3 个磁盘,教程说 4 个,我的池名称是 foxhole,教程是 zroot。)我成功地使用 geom_eli 解密我的卷并成功安装它。
我没有跳过提供的任何步骤。我什至复制了我收到的每个命令,并在一个文本文件中对其进行了更改,以便它们适合我的情况。
这是我现在的问题。最终重新启动以测试所有内容后,内核开始启动,然后我在 mountroot 终端吐口水。geom_eli 似乎没有尝试解密我的根卷。我怀疑为什么。如果我错了,请纠正我。在教程开始时,我收到了为加密卷创建新几何图形的命令:
由于我的卷已经存在,我无法执行那些会创建“/boot/zfs/bootdir/daXp4.eli”文件的命令。
我真的只是在猜测这是原因。当我尝试执行时,我注意到了这一点:
给我“不匹配”。
我假设那些会在池被解密时创建。
我为这篇文章道歉。我试图在不提供太多信息的情况下提供尽可能多的信息。在过去的 18 个小时里,我一直在为此工作。我真的很喜欢头脑清醒的人来看看这个。
如果我错过了任何有用的信息,请告诉我。
linux - 递归复制 /dev/null 到文件模式
我正在使用已达到其磁盘配额的 ZFS 系统。结果,rm
我不再可以使用该命令。但是,我可以复制/dev/null
到特定文件以有效地删除它们。
问题是我要清除的目录大小约为 40GB,每个有任何周长的文件都被埋在 3 个级别内。
是否有命令行方法可以轻松搜索和替换这些文件/dev/null
?我可以在 Python/Perl 中很容易地做到这一点,但是我想通过命令行尝试。
linux - Bash 脚本无法识别命令结果
我有一个 bash 脚本来检查我们的 RAID 系统的状态。
当我手动运行脚本时它可以工作,所以我决定将此脚本作为 cronjob 运行。但是 cronjobs 每次都会发送邮件。我真的希望你能帮我解决这个问题。
rest - Oracle ZFS 存储设备:如何通过 REST API 配置 SMB 共享级别 ACL?
我正在为 Oracle ZFS 存储设备(“ZS3”)开发一个使用 REST API 的脚本。该脚本使用 API 制作生产环境的快照和克隆,以用作临时测试环境。到目前为止一切都很好......除了我找不到为 SMB 协议指定“共享级别 ACL”设置的方法。
手动(通过 web ui)克隆会导致默认 ACL 为“所有人,完全访问”。原始共享(快照/克隆的源)的 ACL 具有带有特定 ACL 的特定用户列表。我假设此信息不在 ZFS 快照中,而是在 ZFS 之外维护,因此它不存在于克隆中(问:这是正确的吗?)。
我已经重读了几次 Oracle 文档“E56084.pdf”(“Oracle ZFS Storage Appliance RESTful API Guide,Release 2013.1.4.0”)。对“sharesmb”属性的引用含糊不清,没有其他与 SMB 或 ACL 相关的内容。我的脚本在传递给 API 以创建文件系统克隆的 JSON 有效负载中正确地将“sharesmb”值(用于启用 SMB 共享)设置为“sharesmb=SHARENAME,abe=off,dfsroot=false”。但是,我看不到可以为实际 ACL 列表设置的属性。对于 NFS,这很容易,它是“sharenfs”属性中传递的值。
源项目和共享的“GET”结果不包含对“SMB 共享级别 ACL”中列出的用户的任何引用,如 Web UI 中所示。
那么,如何通过 REST api 复制或在必要时显式设置共享上的“SMB 共享级别 ACL”?
谢谢!
nfs - NFS - 在主服务器中挂载所有子数据集和共享 [Freenas]
我正在设置此配置:
我需要一个主/管理服务器可以访问所有数据和文件。所以我需要:
然而,FreeNAS 正在创建所有数据集/卷,安装它们并隐藏内容。因此,您无法使用父挂载访问子内容。这是标准行为: https ://forums.freenas.org/index.php?threads/jails-mounted-folders-sub-datasets-dont-work.14567/
从安全的角度来看,我认为这很好。但是如果我真的需要访问特定数据集下的所有数据集,那我该怎么做呢?
我真的必须手动创建所有这些安装点吗?
有没有一种方法可以编写自动访问所有共享的脚本,而无需每次手动更新 fstab?