08 管理文件系统

8.1 探索linux文件系统

基本的linux文件系统

主要有:

  • ext

  • ext2

ext文件系统

扩展文件系统(extended filesystem)为linux提供了一个类unix的文件系统,使用虚拟目录来操作硬件设备,在物理设备上按定长的块来存储数据。

其采用索引节点来存放文件信息。每个物理设备中都有一个单独的索引节点表,每一个文件在索引节点表中都有一个条目。linux通过索引节点号来引用索引节点表中的每个索引节点。节点号是创建文件时系统分配的。

ext2文件系统

较之于ext,ext2扩大了文件大小的限制,扩展了索引节点表中关于文件的信息,还采用了按组分配块的方式减少碎片化。

ext中一个文件的块可能散布在整个硬盘中,这样查找文件会花费更多时间。而ext2把块又进行了分组,减少了查找时间。

但是ext2还有一个问题,就是如果文件和索引节点之间可能的不同步。

日志文件系统

主要有:

  • ext3

  • ext4

  • Reiser

  • JFS

  • XFS

为了解决上述不同步问题,出现了日志文件系统(journal):现将文件的更改写入日志,在数据成功写到存储设备和索引节点后,再将日志中的内容删除。有三种方式:

方法

描述

数据模式

索引节点和文件都会被写入日志;丢失风险低,但性能差

有序模式

只有索引节点会被写入日志,但只有数据成功写入硬盘后,才会删除日志;trade off

回写模式

只有索引节点会被写入日志,但不控制文件数据何时写入;风险较大,但还是比没有日志好

ext3

2001年引入linux内核,在etc2基础上增加了日志文件。默认采用有序模式:只将索引节点写入日志,知道数据块都被成功写入存储设备之后,才会删除。

ext4

目前使用最广泛,新增了块预分配等技术。

Reiser

采用回写模式,速度很快。

JFS

Journaled File System,IBM推出,采用有序模式。

XFS

硅图公司推出,采用回写模式。

写时复制(copy-on-write, COW)文件系统

主要有:

  • ZFS

  • Btrf

修改过的数据并不会直接覆盖当前数据,而是被放入文件系的其他地方。即使是数据修改已经完成,之前的数据也不会被重写。

ZFS

Sun公司推出,用于OpenSolaris,后移植linux。

Btrf文件系统

也称B树文件系统。

8.2 操作文件系统

新硬盘加入后到能够使用的步骤:fdisk分区 -> 使用文件系统格式化 -> 挂载

创建分区fdisk

fdisk是个交互式程序,如我们要对/dev/sdb硬盘进行分区,则使用命令

$ fdisk /dev/sdb

老式的IDE驱动器是hdx,SATA和SCSI驱动器则是sdx

接下来是一个交互过程,有如下等命令可以使用

  • p:显示存储设备的详细信息

  • n:创建新的分区

  • w:将结果进行保存

每个存储设备只能有4个分区。如果不够用,可以将某个分区作为扩展分区。在扩展分区里面,可以再划分更多的逻辑分区。

创建文件系统

下面是一个创建文件系统的工具,注意这些工具并非都是默认安装。

工具

用途

mkfs.ext3

创建一个ext3文件系统

mkfs.ext4

创建一个ext4文件系统

mkreiserfs

创建一个ReiserFS文件系统

jfs_mkfs

创建一个JFS文件系统

mkfs.xfs

创建一个XFS文件系统

mkfs.zfs

创建一个ZFS文件系统

mkfs.btrfs

创建一个Btrfs文件系统

可以通过一个不带选项的简单命令来创建文件系统

$ mkfs.ext4 /dev/sdb1

挂载

最后一个是挂载,我们现在/mnt目录下手动创建挂载点,然后挂载

$ mkdir /mnt/my_partition
$ mount -t ext4 /dev/sdb1 /mnt/my_partition

注意这样挂载重启后变会失效,如果要linux在启动时自动挂载新的文件系统,可以将其添加到/etc/fstab文件中。

8.3 逻辑卷管理

逻辑卷管理器(logical volume manager),现在通用的版本是LVM2。

逻辑卷管理布局

一个物理卷对应一个硬盘上的分区。多个物理卷可以集中在一起形成一个卷组(volume group),组成卷组的物理卷可以在多个硬盘中。最后LVM在一个卷组中划分出若干逻辑卷。

LVM的几个概念

快照

允许在逻辑卷在线的状态下将其复制到另一个设备。

条带化(striping)

正是因为有了条带华,LVM才能跨多个物理硬盘创建逻辑卷。另外,条带化还有助于提高硬盘的性能,因为linux可以将一个文件的多个数据块同时写在多个硬盘中,无需等待磁头的移动。

镜像

镜像是一个实时更新的完整副本。一旦镜像原始同步完成,LVM会为文件系统的每次写操作在本体和镜像中各写一次。当然这也意味着性能的损耗。

使用LVM

具体的使用暂时不记录。