FreeBSD:删除 devfs 中的符号链接

FreeBSD:删除 devfs 中的符号链接

背景

我一直在重建一个小型家用 NAS。该服务器代表了我第一次“真正”涉足服务器管理领域,它已经教会了我很多东西。最初,这个东西是在一个拇指驱动器上使用 FreeNAS 设置的,该驱动器在 raidz1 中配置了 3 个磁盘。从那时起,我决定将整个系统迁移到 FreeBSD 9.0(稳定),以便更好地控制系统,并简单地学习如何“自己动手”。一切都很顺利,操作系统成功安装和更新(再次拇指驱动器,RW,访问时间和其他一些东西被禁用以防止闪存滥用)。

现在我正在设置我的磁盘存储,再次使用 raidz1。为此,我已将所有想要保留的文件复制到外部存储。在探索各种 zfs 命令时,我发现 FreeNAS 安装中的原始 zpool 仍然可见。我使用导入并升级了池

# zpool import ZFS1 tank   //Import the original zpool 'ZFS1', renaming it 'tank'
# zpool upgrade tank       //FreeNAS uses an older ZFS version, FreeBDS is v28
# zfs mount tank

并能够再次查看我的文件。肉汁。经过一番探索后,我决定还是想扔掉旧的游泳池并重新开始。我发出

# zfs umount tank
# zpool destroy tank

没有错误地完成了。现在我希望用这些磁盘重新创建一个“干净”的 raidz1。

问题

在创建新的 raidz1 之前,我在 中做了一些研究/dev,只是为了看看我能学到什么。我想检查阵列中使用的磁盘,但我得到的输出对我来说似乎很奇怪。更糟糕的是,谷歌搜索并不能真正解释发生了什么。磁盘列表如下:

# ls -l ad*
lrwxr-xr-x  1 root  wheel            4 Aug 12 20:50 ad2 -> ada2
lrwxr-xr-x  1 root  wheel            4 Aug 12 20:50 ad4 -> ada0
lrwxr-xr-x  1 root  wheel            4 Aug 12 20:50 ad6 -> ada1
crw-r-----  1 root  operator    0,  96 Aug 12 20:50 ada0
crw-r-----  1 root  operator    0,  98 Aug 12 20:50 ada1
crw-r-----  1 root  operator    0, 100 Aug 12 20:50 ada2

我知道我在设置 raid 时在 FreeNAS 中创建了三个虚拟磁盘,我怀疑这就是链接的来源。我对此的疑问如下:

  1. 通过搜索符号链接的工作原理,我了解到符号链接只是一个将一个项目链接到另一个项目的文件。如果是这种情况,为什么 ada* 设备不使用“l”属性列出,而实际硬件设备不使用另一个属性(可能是块设备)列出?

  2. 这些链接是我之前设置的产物思考是必要的。它们可以被删除吗?如果是这样,如何(有点害怕随意删除东西;请参阅参考资料部分中的最后一个链接)?删除ad*条目是否会隐式删除ada*节点,因为它们现在引用了不存在的链接?或者我有这个倒退吗?

  3. 哪些是实际的硬件设备?正如我在上一个问题中提到的,我认为ad*节点将是字符设备或类似的设备,ada*节点将是链接文件。

  4. 最后,我知道根据设置和个人喜好肯定会存在一些差异,但是为简单的 raidz1 配置我的 SATA 设备的“可接受”方式是什么?对于一个简单的家庭 NAS 来说,所有这些符号链接业务似乎有点大材小用。

对于这么长的帖子,我深表歉意,但我已经尝试了很长一段时间来理解这一点。预先感谢您的时间和帮助。

参考

答案1

  1. ada设备是连接到较新的 SATA 端口的驱动器。有些人错过了这份备忘录,因此对 DevFS 进行了修改,以像传统设备一样提供这些设备名称的符号链接ad。但是,系统可能已经有一些较旧的 SATA 端口或 IDE 端口,因此这些端口将占用较低的ad设备编号(ad0、ad1 等)。因此映射的ada设备会获得更高的数字。

    注意:如果您还没有意识到,/dev这是一种不同类型的文件系统(开发文件系统)。虽然它显示了像符号链接这样的简单结构,但它们并不是您所想的意义上的实际符号链接。

  2. 你的前提是错误的,参见#1。
  3. 那些没有说它们是符号链接(通过l您指出的)的是设备驱动程序。它们的“真实性”程度各不相同,因为软件也可以提供设备。
  4. 我认为“最好”的方法是使用 GPT 分区,为它们指定合理的名称,并将这些命名分区作为 raidz 的 vdev 包含在内。

    像下面这样的东西就可以做到这一点:

    gpart create -s GPT ada0
    gpart create -s GPT ada1
    gpart create -s GPT ada2
    
    gpart add -t freebsd-zfs -l tank-disk0 ada0
    gpart add -t freebsd-zfs -l tank-disk1 ada1
    gpart add -t freebsd-zfs -l tank-disk2 ada2
    
    zpool create tank raidz /dev/gpt/tank-disk0 /dev/gpt/tank-disk1 /dev/gpt/tank-disk2
    

    否则,最建议将磁盘直接传递到 ZFS。这两种配置都有支持者。如果您走这条路,我强烈建议您也设置smartd监控磁盘运行状况。还可以配置periodic清理 zpool、监控 SMART 并定期向您发送报告(每周或您喜欢的任何时间)。

顺便说一句,FreeNAS 和其他 FreeBSD 派生项目使使用 FreeBSD 比简单地深入研究核心操作系统要容易得多。手册将指导您完成绝大多数您想要设置的内容,但随着时间的推移您也会遇到一些问题。如果你用 Google 搜索“handbook”,FreeBSD Handbook 就是排名第二的链接;它是如此重要/流行/良好。

关于参考文献的另一项注释。第一个是一个糟糕的例子,因为您不应该对网卡进行符号链接,您应该重命名它们(尽管不是文件系统类型重命名)。 DevFS 确实会响应链接和取消链接请求,大部分正如您所期望的那样。第二个和第三个参考文献看起来不错。请记住,链接的类型比符号链接的类型更多。

相关内容