陈日志 发布的文章

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 兼容。

- 阅读剩余部分 -

定时备份和实时备份

说到备份,无疑于定时备份和实时同步备份。定时备份可以通过脚本或者Crontab来实现,而实时同步备份可以通过某些接口监控文件的各种变化情况来实现的(比如内核接口inotify);通过对比可以发现对数据信息要求高的环境使用实时同步备份可以更好更有利的保护数据的安全性。

软件介绍之rsync

rsync说明

rsync 远程同步,同步是把数据从缓冲区同步到磁盘上去的、数据在内存缓存区完成之后还没有写入到磁盘中去、所以有时候要同步到磁盘中去的,而rsync说白了和复制差不多、能将一个文件从一个地方复制到另外一个地方的、但是他也可以实现跨主机复制,兼具了cp和scp的功能,但是在跨主机时不具备scp的加密功能。

rsync有一个特点,就是当你用rsync复制或跨主机复制时如果另一端也有一个同名的文件,他会先对比两个数据的md5码是不是一致,如果不一致就会复制,并覆盖,如果一致他将不会复制,所以这是一个快速复制工具,尤其是同步目录时,特别好用。

- 阅读剩余部分 -