ZFS
ZFS 文件系统是 FreeBSD 上的一等公民。这不仅意味着可以在 ZFS 上安装根目录,安装程序也支持这一点,而且还意味着很多基础系统工具都已经紧密地集成或构建了对 ZFS 的支持。在 FreeBSD 上运行 ZFS 和在 Linux 上运行 ZFS 是不同的。在 FreeBSD 上,你会得到更多的工具,可以用来研究 ZFS 的性能问题或其他相关问题。
ZFS 的一些特点是(摘自维基百科)。
设计用于长期的数据存储,无限扩展的数据存储大小,零数据丢失,高配置性。
对所有数据和元数据进行分层校验和,确保整个存储系统在使用时可以进行验证,并确认是否正确存储,如果损坏则进行补救。校验和存储的是块的父块,而不是块本身。这与许多文件系统形成鲜明对比,在这些系统中,校验和(如果持有)与数据一起存储,因此,如果数据丢失或损坏,校验和也可能丢失或不正确。
可以存储用户指定数量的数据或元数据副本,或选定的数据类型,以提高重要文件和结构的数据损坏后的恢复能力。
在某些情况下,在发生错误或不一致的情况下,自动回滚最近对文件系统和数据的更改。
当检测到数据不一致和写入失败时,对于数据能够重建的所有错误,自动和(通常)无声地自愈。数据可以通过以下方式重建:存储在每个块的父块中的错误检测和校正校验和;磁盘上保存的多个数据副本(包括校验和);在 SLOG ( ZIL )上记录的应该发生但没有发生的写入意图(断电后); RAID/RAIDZ 磁盘和卷的奇偶校验数据;镜像磁盘和卷的数据副本。
标准 RAID 级别和额外的 ZFS RAID 布局("RAIDZ")的本地处理。为了提高效率,RAIDZ 级别只在所需的磁盘上进行数据剥离(许多 RAID 系统在所有设备上不加区分地进行剥离),而校验和允许重建不一致或损坏的数据,以最小化有缺陷的块。
原生处理分层存储和缓存设备,这通常是一个与卷相关的任务。因为 ZFS 也了解文件系统,所以它可以利用文件相关的知识来告知、整合和优化其分层存储处理,这是单独的设备无法做到的。
对快照和备份 /复制的本地处理,可以通过整合卷和文件处理来提高效率。相关工具提供的水平较低,需要外部脚本和软件才能利用。
原生的数据压缩和重复数据删除,不过后者主要在 RAM 中处理,且对内存有一定的消耗。
高效重建 RAID 阵列--RAID 控制器经常需要重建整个磁盘,但 ZFS 可以结合磁盘和文件知识,将任何重建限制在实际丢失或损坏的数据上,大大加快了重建速度。
不受 RAID 硬件变化的影响,而这些变化会影响许多其他系统。在许多系统中,如果自带的 RAID 硬件(如 RAID 卡)发生故障,或者数据被移动到另一个 RAID 系统中,文件系统将缺少原 RAID 硬件上的信息,而这些信息是管理 RAID 阵列上的数据所需要的。这可能会导致数据的完全丢失,除非能够获得接近相同的硬件并作为 "垫脚石"。由于 ZFS 自己管理 RAID,所以 ZFS 池可以迁移到其他硬件上,或者重新安装操作系统,RAIDZ 结构和数据将再次被 ZFS 识别并立即访问。
能够识别出本来可以在缓存中找到但最近反而被丢弃的数据,这使得 ZFS 可以根据以后的使用情况重新评估其缓存决策,有利于实现非常高的缓存命中率( ZFS 缓存命中率通常超过 80%)。
对于那些原本会造成数据处理延迟的数据,可以使用替代的缓存策略。例如,能够减慢存储系统速度的同步写入可以通过写入一个快速的独立缓存设备,即 SLOG (有时称为 ZIL--ZFS 意图日志)来转换为异步写入。
高度可调性--许多内部参数可以被配置为最佳功能。
可以用于高可用性集群和计算,尽管不是完全为这个用途设计的。
当然,当你在 Linux 上使用 ZFS 运行时,你也能获得所有这些功能。然而,这其中有一个很大的区别,因为没有任何一个 Linux 发行版甚至接近 FreeBSD 与 ZFS 的集成程度。

启动环境
由于与 ZFS 的紧密集成,FreeBSD 也支持引导环境。通过启动环境,您可以安装多个版本的核心操作系统,并选择其中的一个来启动。因此,启动环境是一个可启动的系统的克隆或快照。有了启动环境,你可以对系统进行防弹升级或更改,你不必担心破坏任何东西,因为你总是可以回滚。
这也意味着您可以在新的 ZFS 引导环境中更新 FreeBSD 系统,而无需接触正在运行的系统。您也可以在 FreeBSD Jail 中进行升级和测试结果。您甚至可以将 ZFS 引导环境复制或移动到另一台机器上。
FreeBSD 的 bectl 工具可以让您轻松管理启动环境。

BSD 启动
  FreeBSD 使用传统的 BSD 风格的 init 。
  在 BSD 风格的 init 中,没有运行级别,也不存在 /etc/inittab 。取而代之的是,启动是由 rc 脚本来控制的。
  在 /etc/rc.d/中找到的脚本是为基本系统的应用程序服务的,比如 cron 、sshd 、syslog 等。而 /usr/local/etc/rc.d/中的脚本则是用户安装的第三方应用程序, 例如 NGINX 或 Postfix 。
  如前所述, 由于 FreeBSD 是作为一个完整的操作系统而开发的, 用户安装的第三方应用程序并不是基本系统的一部分。第三方应用程序是通过包或端口来安装的。为了保持它们与基本系统的分离, 用户安装的应用程序被安装在 /usr/local/ 下。因此,用户安装的二进制文件位于 /usr/local/bin/,而配置文件则位于 /usr/local/etc/。
  在 BSD 初始化系统中,通过在 /etc/rc.conf 中添加服务条目来启用服务。默认设置位于 /etc/defaults/rc.conf 中,这些默认设置会被 /etc/rc.conf 中的设置所覆盖。
  下面的 /etc/rc.conf 中的条目可以启用 sshd 。

  sshd_enable="YES"
  你可以手动添加条目,也可以运行。

  # service sshd enable
  这将自动编辑 /etc/rc.conf 并添加条目。

  你可以用以下方法手动启动一个服务: # service sshd start

  # service sshd start
  如果一个服务没有被启用,但你仍然想启动它,可以使用命令行启动它。

  # service sshd onestart
  你可以在维基百科上阅读更多关于 init 系统的内容。

选择 FreeBSD 而不是 Linux 的技术性原因2的更多相关文章

  1. 选择 FreeBSD 而不是 Linux 的技术性原因3

    选择 FreeBSD 而不是 Linux 的技术性原因3 jail FreeBSD Jails 系统是另一个惊人的工程壮举. 在 2000 年 3 月 14 日的 4.0 版本中,FreeBSD 引入 ...

  2. 选择 FreeBSD 而不是 Linux 的技术性原因4

    Linux 二进制兼容性 FreeBSD 提供了与 Linux 的二进制兼容.这使得用户可以在 FreeBSD 系统上安装和运行许多 Linux 二进制文件, 而无需首先修改二进制文件.在某些特定情况 ...

  3. 选择 FreeBSD 而不是 Linux 的技术性原因1

    Ports FreeBSD Ports 是一个惊人的工程壮举.NetBSD 的 pkgsrc (package source) 和 OpenBSD 的 ports collection 都源于 Fre ...

  4. 【热文】 为什么很多硅谷工程师偏爱 OS X,而不是 Linux 或 Windows?

    校对:伯乐在线 - 黄利民 链接: 1. Why do most of the developers in Silicon Valley prefer OS X over Linux or Windo ...

  5. 让 FreeBSD 和 Gentoo Linux 在 ZFS 存储卷上共存

    自我回归到 Librem 15 已经有段时间了.我一般会选择 FreeBSD 来处理所有的事情,但有时会要访问一个运行在 Librem 平台上的 Linux OS,以便用它来帮助我对一些遗留的设备驱动 ...

  6. 企业开发中选择logback而不是log4j的理由

    不知道看到这篇文章的Java工程师有没有考虑过这个问题:为什么在企业开发中会选择logback来记录日志,而不是log4j呢? 如果你以前没有考虑过这个问题,那么现在如果让你考虑一下,你可能觉的会是因 ...

  7. Effective C# 学习笔记(原则二:为你的常量选择readonly而不是const)

    原则二.为你的常量选择readonly而不是const      Prefer readonly to const 对于常量,C#里面有两个不同的版本:运行时常量(readonly)和编译时常量(co ...

  8. 优先选择nullptr而不是0和NULL

    我们知道:0是一个int,而不是一个指针.如果C++在一个只有指针才能够使用的上下文中发现它只有一个0,那么它会勉强将0解释成空指针,但那时一种倒退行为.C++的主要方针是0就是一个int,而不是指针 ...

  9. 如何选择适合自己的Linux版本

    如何选择适合自己的Linux版本: 1.Linux桌面系统,首选Ubuntu; 2.服务器端的Linux系统,首选RHEL或CentOS,这两种中首选CentOS,如果公司有钱,不在乎成本也可以选择R ...

随机推荐

  1. C#枚举(一)使用总结以及扩展类分享

    0.介绍 枚举是一组命名常量,其基础类型为任意整型. 如果没有显式声明基础类型, 则为Int32 在实际开发过程中,枚举的使用可以让代码更加清晰且优雅. 最近在对枚举的使用进行了一些总结与整理,也发现 ...

  2. java源码之集合类ArrayList

    1. ArrayList概述: ArrayList是List接口的可变数组的实现.实现了所有可选列表操作,并允许包括 null 在内的所有元素.除了实现 List 接口外,此类还提供一些方法来操作内部 ...

  3. github 无法访问

    描述: 1. ping 丢失 100% 2. git 失败 Failed to connect to github.com port 443: Timed out 3.打开网站 超时 解决: http ...

  4. C++中的explicit

    首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数 ...

  5. PyQt5 问题集

    PyQt5中遇到的一些问题 1.多线程中界面异步刷新 我这里需要给界面动态添加新的控件,但是多线程中似乎并不能直接更新页面? 对于逻辑和界面分离的情况,使用自定义信号的方式进行页面控件的动态添加.注意 ...

  6. 写给程序员的机器学习入门 (十一) - 对象识别 YOLO - 识别人脸位置与是否戴口罩

    这篇将会介绍目前最流行的对象识别模型 YOLO,YOLO 的特征是快,识别速度非常快

  7. vuepress & package.json lock version

    vuepress & package.json lock version npm 锁版 bug npm lock version holy shit { "name": & ...

  8. Web 页面生命周期 All In One

    Web 页面生命周期 All In One Web Page LifeCycle All In One refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允 ...

  9. 析构函数 & 构造函数

    析构函数 & 构造函数 C++ 析构函数(destructor) 与构造函数相反,当对象结束其生命周期,如对象所在的函数已调用完毕时,系统自动执行析构函数. 析构函数往往用来做"清理 ...

  10. Learning web development with MDN

    Learning web development with MDN Server-side website programming Dynamic Websites – Server-side pro ...