Linux读书笔记(四)—— 磁盘管理
尽管在过去的几十年里,计算机硬件技术得到了飞速的发展,但磁盘这一古老的存储介质仍然是几乎所有电脑的必备。本章介绍 Linux 下的磁盘管理,包括 Linux 文件系统的概念及使用、硬盘分区及格式化、使用外部设备、文件归档及备份等。
References:
- 《Linux典藏大系:Linux从入门到精通(第二版)》
- 《CentOS Linux系统运维》
- https://www.serverfocus.org/reiserfs-vs-ext4-vs-xfs-vs-zfs-vs-btrfs
从存储原理上讲,硬盘和磁带是一样的。硬盘内部是几个叠在一起的磁性盘片,读取数据的时候,盘片以恒定的速度旋转,边上有一个小磁头进行读取和写入。磁头通过改变盘片上磁性物质的排列来写入数据。值得注意的是,磁头在读写数据的时候并不接触盘面,而是悬浮在距离盘片表面非常近的地方。如果因为某些原因,磁头接触到了盘片,那么就会产生破坏性的后果,这也是为什么不能在运行时搬动主机的一个原因。
现如今有多种不同的硬盘接口。从市场占有率和获支持程度来说,SCSI
和IDE
曾经占据了统治地位。然而这些年,随着SATA
接口硬盘价格的不断下降,越来越多的人选择了SATA
硬盘。现在新配的电脑全部是 SATA 硬盘,也就是所说的串口硬盘。
- Linux文件系统
操作系统必须用一种特定的方式对磁盘进行操作。例如,存储一个文件,表示一个目录,知道某个特定的文件存储在硬盘的哪个位置,这些问题都可以通过文件系统来解决。简单来说,文件系统是一种对物理空间的组织方式,通常在格式化硬盘时创建。在Windows
下,有NTFS
和FAT
两种文件系统。同样地,Linux
也有自己的文件系统并一直在快速演变,下面将会介绍在CentOS
中最常用的几种。
在CentOS
系列系统下,常见的文件系统主要是EXT
。目前,CentOS 6
系列版本中的文件系统已经发展到第4版,不过在最新的7版本中默认不再使用EXT
,而是XFS
(这种文件系统被认为适合用于大数据环境)。
- Ext2
第二扩展文件系统(EXT2
)是为弥补EXT
的缺陷而设计的一个高性能文件系统。该文件系统在弥补EXT
缺陷的同时也增加了系统的可扩展性。当然,EXT2
也存在缺点,比如在写入文件内容的同时并没有同步到meta-data
,而是在空闲时才写入文件。如果在未写入时操作系统发生意外,就会导致文件系统处于不一致状态。
- Ext3
第三扩展文件系统(EXT3
)是从EXT2
升级而来,它在EXT2
的基础上加入了记录元数据的日志功能从兼容性,因此用户很容易将数据从EXT2
迁移到EXT3
。另外,在该版本的文件系统中增加了一个非常重要的功能——系统日志功能,因此EXT3
也称日志式的文件系统,它的最大特点就是可以在短时间内恢复数据。
由于在文件系统中有快取层参与运作,因此在正常关机时就需要将快取层的数据写回磁盘中(前提是必须将所有的文件系统全部卸下)。如果出现断电、宕机等,导致文件系统未卸下就关机,就会造成数据不一致,因此需要对系统数据进行同步。这时日志文件系统就体现出了它的优越,只要通过日志的记录就可以对数据进行恢复,从而在很大程度上保证了系统整体数据的完整性。
- Ext4
第四扩展文件系统(EXT4
)是一种针对EXT3
修改部分重要数据结构的扩展日志式文件系统。在EXT4
上,允许创建无限数量的子目录且这些子目录具有可伸缩性,并引入了extents
概念和多块分配器,使得一次调用就可以分配很多块。这样不仅减少系统的开销,还为数据保存提供了多个连续的数据块。
EXT4
具有更高的兼容性,并消除了储存限制,使得从EXT3
升级至EXT4
时不需要格式化分区。在inode
节点的大小上,EXT4
支持扩大到 256B,并实现在文件系统层面持久预分配磁盘空间。在提供相应API
的同时也启用了barrier
,使数据的读写顺序得到调整,并优化了数据写入性能。
- XFS
XFS包含了许多优秀的功能,例如确定速率I/O,在线调整大小,内置配额执行,并且理论上它可以支持最大支持8exbibytes减1字节的单个文件系统字节的文件系统。自从2001年左右以来,它一直在Linux
上使用,并且在许多流行的Linux
发行版中作为安装选项提供。通过可变块大小,可以像滑动缩放比例一样调整系统来调整磁盘利用率或读取性能。
- 最适合非常大的文件系统,大文件和大量文件
- 日志式(一个非对称并行集群文件系统也可用)
- POSIX扩展访问控制
XFS文件系统是开源的,并且包含在主要的Linux发行版中。它起源于SGI(Irix),专为大文件和大容量可扩展性而设计。视频和多媒体文件最好由该文件系统处理。它是支持数据迁移的Linux上少数几个文件系统之一(SGI早在几年前就将分层存储管理接口贡献给Linux内核)。
其他的文件系统如ReiserFS,BtrFS等等请自行查阅
- 文件系统的目录层次结构
操作系统下的一切文件都是数据的集合,在文件中不仅包含有数据,也包含有各类文件间的层次关系,而这种层次间关系的权限是被严格分开的。在这种严格的等级关系中,位于最高层次的称为根(/)目录,其他的则是它的子目录。
各个常用目录的简单介绍如下:
* 根(/)目录:是整个 Linux文件系统的最顶层目录,也是文件系统的入口。
* /bin目录:主要存放一些可执行文件,这些文件就是一个命令。
* /dev目录:用于存放一些设备文件。
* /home 目录:是普通用户主目录所在的目录。
* /lib目录:用于存放各种函数和库文件。
* /media目录:用于挂载如 USB、CD等设备。
* /var目录:用于保存系统运行时所需要改变的数据,数据的大小不定。
* /etc目录:含有系统各种配置文件,如网络、安全、进程等。
* /lost+found 目录:存放系统在不正常关机时产生的数据碎片,这些数据的碎片可用于系统的恢复。
* /usr目录:用于存放一些本地帮助文档及其他相关的信息。
* /etc/rc.d/init.d目录:存放系统启动时自动执行的一些可执行脚本。
文件系统的基本组成
Linux系统提供一种通用的文件处理方式,将所有的软件、硬件都视为文件来管理,并将映射成文件的不同物理设备放在层次相同或不同的目录下,然后通过文件的方式来管理所有的设备,从而简化对物理设备的管理和访问,所以在Linux下,一切皆文件。- 普通文件
普通文件(ordinary file)是一种出现在路径末端且不能再继续往下延伸的文件。这种文件主要由文本文件和二进制文件组成,是 Linux 系统下最为常见、数量最多的文件。系统大多数的配置文件、代码文件都是以普通文件的形式存在的。
普通文件以“-”作为标识,标识符后是相关用户对该文件所具有的权限,而后是其他相关的信息,最后是该文件的名称,其组成如下所示。
对于多数的普通文件而言,它们的内容都是可读的,即使文件的扩展名不同。因此,单从文件名本身区别普通文件所属的类型并不容易(如以“.sh”为扩展名的通常是 shell 脚本文件,但去掉扩展名后也不会造成影响),不过可以借助系统提供的相关命令(file
)来识别。
* 目录文件
* 链接文件
* 特殊文件
----未完待续----