陈日志 发布的文章

之前在介绍 Linux 文件系统的文章中,有提过 ZFS、Btrfs文件系统中,有内置快照的功能,也有提到过其快照的由 CoW 机制实现的。那么这篇文章将带领大家了解快照的原理。

快照技术分类

常见快照的类别有两类:

  • 全拷贝快照
  • 差分快照

全拷贝快照

拷贝快照是通过镜像技术来实现的,即其同时会写两个磁盘,我们可以理解为磁盘整列技术中的 RAID1。

下面通过一张原理图来介绍全拷贝快照的实现原理。

全拷贝快照.png

- 阅读剩余部分 -

Btrfs 简介

文件系统似乎是内核中比较稳定的部分,多年来,人们一直使用 ext2/3,ext 文件系统以其卓越的稳定性成为了事实上的 Linux 标准文件系统。近年来 ext2/3 暴露出了一些扩展性问题,于是便催生了 ext4 。在 2008 年发布的 Linux2.6.19 内核中集成了 ext4 的 dev 版本。 2.6.28 内核发布时,ext4 结束了开发版,开始接受用户的使用。似乎 ext 就将成为 Linux 文件系统的代名词。然而当您阅读很多有关 ext4 的文章时,会发现都不约而同地提到了 btrfs,并认为 ext4 将是一个过渡的文件系统。 ext4 的作者 Theodore Tso 也盛赞 btrfs 并认为 btrfs 将成为下一代 Linux 标准文件系统。 Oracle,IBM, Intel 等厂商也对 btrfs 表现出了极大的关注,投入了资金和人力。为什么 btrfs 如此受人瞩目呢。这便是本文首先想探讨的问题。

Kevin Bowling[1] 有一篇介绍各种文件系统的文章,在他看来,ext2/3 等文件系统属于“古典时期”。文件系统的新时代是 2005 年由 Sun 公司的 ZFS 开创的。 ZFS 代表” last word in file system ”,意思是此后再也不需要开发其他的文件系统了。 ZFS 的确带来了很多崭新的观念,对文件系统来讲是一个划时代的作品。

如果您比较 btrfs 的特性,将会发现 btrfs 和 ZFS 非常类似。也许我们可以认为 btrfs 就是 Linux 社区对 ZFS 所作出的回应。从此往后在 Linux 中也终于有了一个可以和 ZFS 相媲美的文件系统。

- 阅读剩余部分 -

1、文件系统相关概念

计算机文件系统是一种存储和组织计算机数据的方法,它使得对其访问和查找变得容易,文件系统使用文件树形目录的抽象逻辑概念代替了硬盘和光盘等物理设备使用数据块的概念,用户使用文件系统来保存数据不必关心数据实际保存在硬盘(或者光盘)的地址为多少的数据块上,只需要记住这个文件的所属目录和文件名。在写入新数据之前,用户不必关心硬盘上的那个块地址没有被使用,硬盘上的存储空间管理(分配和释放)功能由文件系统自动完成,用户只需要记住数据被写入到了哪个文件中。

文件系统通常使用硬盘光盘这样的存储设备,并维护文件在设备中的物理位置。但是,实际上文件系统也可能仅仅是一种访问数据的界面而已,实际的数据是通过网络协议(如NFSSMB9P等)提供的或者内存上,甚至可能根本没有对应的文件(如proc文件系统)。

严格地说,文件系统是一套实现了数据的存储、分级组织、访问和获取等操作的抽象数据类型(Abstract data type)。

文件系统是一种用于向用户提供底层数据访问的机制。它将设备中的空间划分为特定大小的块(或者称为),一般每块512字节。数据存储在这些块中,大小被修正为占用整数个块。由文件系统软件来负责将这些块组织为文件和目录,并记录哪些块被分配给了哪个文件,以及哪些块没有被使用。

不过,文件系统并不一定只在特定存储设备上出现。它是数据的组织者和提供者,至于它的底层,可以是磁盘,也可以是其它动态生成数据的设备(比如网络设备)。

100_000-files_5-bytes_each_--_400_megs_of_slack_space.png

空闲空间示例:每簇4,096字节的NTFS文件系统,每个文件5字节,共100,000个文件,逻辑字节总共500,000字节,但由于一个文件需独占整数倍个(最后一簇无论是否占满,仍会独占一整个簇),实际占用磁盘空间409,600,000字节(每个文件5字节独占一个簇)

- 阅读剩余部分 -

1、计划任务简介

计划任务是指将需要定时或周期性执行的任务通过计算机程序自动执行。在 Linux 中,提供这类服务的程序通常是 crond,常常也叫 crontab。

crond 是 Linux 下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与 Windows 下的计划任务类似。通常的,crond 是 Linux 发行版自带的服务,并且设置了开机自动启动,crond 进程的最小调度单位是分钟,即每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

2、深入了解 crontab

crond 的任务类别分为两类,系统任务和用户任务。他们对应的配置文件分别是 /etc/crontab/var/spool/cron/用户名

先看用户任务,用户任务的配置文件在 /var/spool/cron/用户名,其定义如下:

*****command
命令
    • 0-59:具体的分钟
    • *:每分钟
    • */n:n为数值,表示每n分钟
    • 0-23:具体的小时
    • *:每小时
    • */n:n为数值,表示每n小时
    • 1-31:具体的日期
    • *:每日
    • */n:n为数值,表示每n天
    • 1-12:具体的月份
    • *:每月
    • */n:n为数值,表示每n月
    • 0-7:具体的周几,0和7都表示周日
    • *:每周
    • */n:n为数值,表示每n周

- 阅读剩余部分 -

1、Linux启动过程概述

1.1、启动过程

启动过程.png

上图中,有 GRUB、GRUB2、init、systemd 等几个概念,下面做一下简单的说明。

GRUB2 相较于 GRUB 的提升:更健壮、可移植、更强大。支持 Legacy BIOS、EFI 和 OpenFirmware,支持 GPT 和 MBR 分区表。支持非 Linux 系统,如苹果 HFS 文件系统和 Windows 的 NTFS 文件系统。

systemd 被设计用来改进 sysvinit 的缺点,它和 Ubuntu 的 upstart 是竞争对手,然而从 Ubuntu 15.04 开始,Ubuntu 开始逐步使用 systemd 替代 Upstart 初始化系统。

systemd 的目标是:尽可能启动更少进程;尽可能将更多进程并行启动。systemd 尽可能减少对 shell 脚本的依赖。传统 sysvinit 使用 inittab 来决定运行哪些 shell 脚本,大量使用 shell 脚本被认为是效率低下无法并行的原因。systemd 使用了 Linux 专属技术,不再顾及 POSIX 兼容。

- 阅读剩余部分 -