鸟哥的Linux私房菜05_Linux磁盘与文件系统管理

  1. 硬盘组成与分割的复习
    • 整颗磁盘的组成主要有:
      • 圆形的磁盘盘(主要记录数据的部分);
      • 机械手臂,与在机械手臂上的磁盘读取头(可擦写磁盘盘上的数据);
      • 主轴马达,可以转动磁盘盘,让机械手臂的读取头在磁盘盘上读写数据。
    • 磁盘盘上的物理组成
      • 扇区(Sector)为最小的物理储存单位,每个扇区为 512 bytes;
      • 将扇区组成一个圆,那就是磁柱(Cylinder),磁柱是分割槽(partition)的最小单位;
      • 第一个扇区最重要,里面有:(1)主要启动区(Master boot record, MBR)及分割表(partition table), 其中 MBR 占有 446 bytes,而 partition table 则占有 64 bytes。
    • 各种接口的磁盘在Linux中的文件名分别为:
      • /dev/sd[a-p][1-15]:为SCSI, SATA, U盘, Flash闪盘等接口的磁盘文件名;
      • /dev/hd[a-d][1-63]:为 IDE 接口的磁盘文件名;
    • 关于分割的定义
      • 主要分割与扩展分配最多可以有四笔(硬盘的限制)
      • 扩展分配最多只能有一个(操作系统的限制)
      • 逻辑分割是由扩展分配持续切割出来的分割槽;
      • 能够被格式化后,作为数据存取的分割槽为主要分割与逻辑分割。扩展分配无法格式化;
      • 逻辑分割的数量依操作系统而不同,在Linux系统中,IDE硬盘最多有59个逻辑分割(5号到63号), SATA硬盘则有11个逻辑分割(5号到15号)。
  2. 文件系统特性
    • 磁盘分区完毕后还需要进行格式化(format),之后操作系统才能够使用这个分割槽。为什么需要进行『格式化』呢?这是因为每种操作系统所配置的文件属性/权限并不相同, 为了存放这些文件所需的数据,因此就需要将分割槽进行格式化,以成为操作系统能够利用的『文件系统格式(filesystem)』。
    • windows 98 以前的微软操作系统主要利用的文件系统是 FAT (或 FAT16),windows 2000 以后的版本有所谓的 NTFS 文件系统,至于 Linux 的正统文件系统则为 Ext2 (Linux second extended file system, ext2fs)这一个。此外,在默认的情况下,windows 操作系统是不会认识 Linux 的 Ext2 的
    • 一个可被挂载的数据为一个文件系统而不是一个分割槽喔!
    • 较新的操作系统的文件数据除了文件实际内容外, 通常含有非常多的属性,例如 Linux 操作系统的文件权限(rwx)与文件属性(拥有者、群组、时间参数等)。 文件系统通常会将这两部份的数据分别存放在不同的区块,权限与属性放置到 inode 中,至于实际数据则放置到 data block 区块中。 另外,还有一个超级区块 (superblock) 会记录整个文件系统的整体信息,包括 inode 与 block 的总量、使用量、剩余量等。每个 inode 与 block 都有编号,至于这三个数据的意义可以简略说明如下:
      • superblock:记录此 filesystem 的整体信息,包括inode/block的总量、使用量、剩余量, 以及文件系统的格式与相关信息等;
      • inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的 block 号码;
      • block:实际记录文件的内容,若文件太大时,会占用多个 block
    • 由于每个 inode 与 block 都有编号,而每个文件都会占用一个 inode ,inode 内则有文件数据放置的 block 号码。
    • 索引式文件系统(indexed allocation)
      Alt text
      这个 inode 记录了文件数据的实际放置点为 2, 7, 13, 15 这四个 block 号码,此时我们的操作系统就能够据此来排列磁盘的阅读顺序,可以一口气将四个 block 内容读出来!
    • 惯用的闪盘(闪存),闪盘使用的文件系统一般为 FAT 格式
      Alt text
      如果同一个文件数据写入的 block 分散的太过厉害时,则我们的磁盘读取头将无法在磁盘转一圈就读到所有的数据, 因此磁盘就会多转好几圈才能完整的读取到这个文件的内容!
    • 需要碎片整理的原因就是文件写入的 block 太过于离散了,此时文件读取的效能将会变的很差所致。 这个时候可以透过碎片整理将同一个文件所属的 blocks 汇整在一起,这样数据的读取会比较容易啊! FAT 的文件系统需要经常的碎片整理一下,由于 Ext2 是索引式文件系统,基本上不太需要常常进行碎片整理的。
  3. Linux 的 EXT2 文件系统(inode)
    • 文件系统一开始就将 inode 与 block 规划好了,除非重新格式化(或者利用 resize2fs 等命令变更文件系统大小),否则 inode 与 block 固定后就不再变动。
    • Ext2 文件系统在格式化的时候基本上是区分为多个区块群组 (block group) 的,每个区块群组都有独立的 inode/block/superblock 系统。
      Alt text
      在整体的规划当中,文件系统最前面有一个启动扇区(boot sector),这个启动扇区可以安装启动管理程序
    • data block (数据区块)
      在 Ext2 文件系统中所支持的 block 大小有 1K, 2K 及 4K 三种而已。在格式化时 block 的大小就固定了,且每个 block 都有编号,以方便 inode。 block 大小而产生的 Ext2 文件系统限制如下:
      Alt text
      除此之外 Ext2 文件系统的 block 还有什么限制呢?有的!基本限制如下:
      • 原则上,block 的大小与数量在格式化完就不能够再改变了(除非重新格式化);
      • 每个 block 内最多只能够放置一个文件的数据;
      • 承上,如果文件大于 block 的大小,则一个文件会占用多个 block 数量;
      • 承上,若文件小于 block ,则该 block 的剩余容量就不能够再被使用了(磁盘空间会浪费)。
    • inode table (inode 表格)
      • inode 记录的文件数据
        1)该文件的存取模式(read/write/excute);
        2)该文件的拥有者与群组(owner/group);
        3)该文件的容量;
        4)该文件创建或状态改变的时间(ctime);
        5)最近一次的读取时间(atime);
        6)最近修改的时间(mtime);
        7)定义文件特性的旗标(flag),如 SetUID...;
        8)该文件真正内容的指向 (pointer);
      • inode 的数量与大小也是在格式化时就已经固定了:
        1) 每个 inode 大小均固定为 128 bytes;
        2) 每个文件都仅会占用一个 inode 而已;
        3) 承上,因此文件系统能够创建的文件数量与 inode 的数量有关;
        4) 系统读取文件时需要先找到 inode,并分析 inode 所记录的权限与用户是否符合,若符合才能够开始实际读取 block 的内容。
      • inode的结构:
        Alt text
        上图最左边为 inode 本身 (128 bytes),里面有 12 个直接指向 block 号码的对照,这 12 笔记录就能够直接取得 block 号码啦! 至于所谓的间接就是再拿一个 block 来当作记录 block 号码的记录区,如果文件太大时, 就会使用间接的 block 来记录编号。同理,如果文件持续长大,那么就会利用所谓的双间接,第一个 block 仅再指出下一个记录编号的 block 在哪里, 实际记录的在第二个 block 当中。
        我们以较小的 1K block 来说明好了,node 能够指定多少个 block ?总额:将直接、间接、双间接、三间接加总,得到 12 + 256 + 256256 + 256256*256 (K) = 16GB
    • Superblock (超级区块)
      Superblock 是记录整个 filesystem 相关信息的地方,他记录的信息主要有:
      • block 与 inode 的总量;
      • 未使用与已使用的 inode / block 数量;
      • block 与 inode 的大小 (block 为 1, 2, 4K,inode 为 128 bytes);
      • filesystem 的挂载时间、最近一次写入数据的时间、最近一次检验磁盘 (fsck) 的时间等文件系统的相关信息;
      • 一个 valid bit 数值,若此文件系统已被挂载,则 valid bit 为 0 ,若未被挂载,则 valid bit 为 1 。
        一般来说, superblock 的大小为 1024bytes。相关的 superblock 信息我们等一下会以 dumpe2fs 命令来呼叫出来观察喔!
        事实上除了第一个 block group 内会含有 superblock 之外,后续的 block group 不一定含有 superblock , 而若含有 superblock 则该 superblock 主要是做为第一个 block group 内 superblock 的备份
    • Filesystem Description (文件系统描述说明)
      这个区段可以描述每个 block group 的开始与结束的 block 号码,以及说明每个区段 (superblock, bitmap, inodemap, data block) 分别介于哪一个 block 号码之间。这部份也能够用 dumpe2fs 来观察的。
    • block bitmap (区块对照表)
      从 block bitmap 当中可以知道哪些 block 是空的,因此我们的系统就能够很快速的找到可使用的空间来处置文件啰。同样的,如果你删除某些文件时,那么那些文件原本占用的 block 号码就得要释放出来。
    • inode bitmap (inode 对照表)
      只是 block bitmap 记录的是使用与未使用的 block 号码, 至于 inode bitmap 则是记录使用与未使用的 inode 号码啰!
    • dumpe2fs
      Alt text
      利用 dumpe2fs 可以查询到非常多的信息,不过依内容主要可以区分为上半部是 superblock 内容, 下半部则是每个 block group 的信息了。
  4. 与目录树的关系
    知道目录的内容在记录文件名, 一般文件才是实际记录数据内容的地方。那么目录与文件在 Ext2 文件系统当中是如何记录数据的呢?
    • 目录
      当我们在 Linux 下的 ext2 文件系统创建一个目录时, ext2 会分配一个 inode 与至少一块 block 给该目录。其中,inode 记录该目录的相关权限与属性,并可记录分配到的那块 block 号码; 而 block 则是记录在这个目录下的文件名与该文件名占用的 inode 号码数据。也就是说目录所占用的 block 内容在记录如下的信息:
      Alt text
      如果想要实际观察 root 家目录内的文件所占用的 inode 号码时,可以使用 ls -i 这个选项来处理:
      Alt text
      Alt text
      由于鸟哥的根目录 /dev/hdc2 使用的 block 大小为 4K ,因此每个目录几乎都是 4K 的倍数。 其中由于 /sbin 的内容比较复杂因此占用了 3 个 block ,此外,鸟哥的系统中 /boot 为独立的 partition , 该 partition 的 block 为 1K 而已,因此该目录就仅占用 1024 bytes 的大小。
      由上面的结果我们知道目录并不只会占用一个 block 而已,也就是说: 在目录底下的文件数如果太多而导致一个 block 无法容纳的下所有的档名与 inode 对照表时,Linux 会给予该目录多一个 block 来继续记录相关的数据;
    • 文件
      当我们在 Linux 下的 ext2 创建一个一般文件时, ext2 会分配一个 inode 与相对于该文件大小的 block 数量给该文件。
    • 目录树读取
      因为文件名是记录在目录的 block 当中, 因此当我们要读取某个文件时,就务必会经过目录的 inode 与 block ,然后才能够找到那个待读取文件的 inode 号码, 最终才会读到正确的文件的 block 内的数据。
      由于目录树是由根目录开始读起,因此系统透过挂载的信息可以找到挂载点的 inode 号码(通常一个 filesystem 的最顶层 inode 号码会由 2 号开始喔!),此时就能够得到根目录的 inode 内容,并依据该 inode 读取根目录的 block 内的文件名数据,再一层一层的往下读到正确的档名。
  5. EXT2/EXT3 文件的存取与日志式文件系统的功能
    • 假设我们想要新增一个文件,此时文件系统的行为是:
      • 先确定用户对于欲新增文件的目录是否具有 w 与 x 的权限,若有的话才能新增;
      • 根据 inode bitmap 找到没有使用的 inode 号码,并将新文件的权限/属性写入;
      • 根据 block bitmap 找到没有使用中的 block 号码,并将实际的数据写入 block 中,且升级 inode 的 block 指向数据;
      • 将刚刚写入的 inode 与 block 数据同步升级 inode bitmap 与 block bitmap,并升级 superblock 的内容。
        一般来说,我们将 inode table 与 data block 称为数据存放区域,至于其他例如 superblock、 block bitmap 与 inode bitmap 等区段就被称为 metadata (中介数据) 。因为 superblock, inode bitmap 及 block bitmap 的数据是经常变动的,每次新增、移除、编辑时都可能会影响到这三个部分的数据,因此才被称为中介数据的。
    • 数据的不一致 (Inconsistent) 状态
      假如你的文件在写入文件系统时,因为不知名原因导致系统中断(例如突然的停电啊、 系统核心发生错误啊~等等的怪事发生时),所以写入的数据仅有 inode table 及 data block 而已, 最后一个同步升级中介数据的步骤并没有做完,此时就会发生 metadata 的内容与实际数据存放区产生不一致 (Inconsistent) 的情况了。
      在早期的 Ext2 文件系统中,如果发生这个问题, 那么系统在重新启动的时候,就会藉由 Superblock 当中记录的 valid bit (是否有挂载) 与 filesystem state (clean 与否) 等状态来判断是否强制进行数据一致性的检查!若有需要检查时则以 e2fsck 这支程序来进行的。
      这样的检查真的是很费时~得要搜寻整个 filesystem。这也就造成后来所谓日志式文件系统的兴起了。
    • 日志式文件系统 (Journaling filesystem)
      如果在我们的 filesystem 当中规划出一个区块,该区块专门在记录写入或修订文件时的步骤, 那不就可以简化一致性检查的步骤了?也就是说:
      1)预备:当系统要写入一个文件时,会先在日志记录区块中纪录某个文件准备要写入的信息;
      2)实际写入:开始写入文件的权限与数据;开始升级 metadata 的数据;
      3) 结束:完成数据与 metadata 的升级后,在日志记录区块当中完成该文件的纪录。
      万一数据的纪录过程当中发生了问题,那么我们的系统只要去检查日志记录区块, 就可以知道哪个文件发生了问题,针对该问题来做一致性的检查即可,而不必针对整块 filesystem 去检查, 这样就可以达到快速修复 filesystem 的能力了!这就是日志式文件最基础的功能
      就透过 ext3 即可! ext3 是 ext2 的升级版本,并且可向下兼容 ext2 版本呢!
      dumpe2fs 输出的信息,可以发现 superblock 里面含有底下这样的信息:
      Alt text
      透过 inode 8 号记录 journal 区块的 block 指向,而且具有 128MB 的容量在处理日志呢!
  6. Linux 文件系统的运行
    所有的数据都得要加载到内存后 CPU 才能够对该数据进行处理。想一想,如果你常常编辑一个好大的文件, 在编辑的过程中又频繁的要系统来写入到磁盘中,由于磁盘写入的速度要比内存慢很多, 因此你会常常耗在等待硬盘的写入/读取上。为了解决这个效率的问题,因此我们的 Linux 使用的方式是透过一个称为异步处理 (asynchronously) 的方式。所谓的异步处理是这样的:当系统加载一个文件到内存后,如果该文件没有被更动过,则在内存区段的文件数据会被配置为干净(clean)的。 但如果内存中的文件数据被更改过了(例如你用 nano 去编辑过这个文件),此时该内存中的数据会被配置为脏的 (Dirty)。此时所有的动作都还在内存中运行,并没有写入到磁盘中! 系统会不定时的将内存中配置为『Dirty』的数据写回磁盘,以保持磁盘与内存数据的一致性。 你也可以利用第五章谈到的 sync命令来手动强迫写入磁盘。
    因此我们 Linux 系统上面文件系统与内存有非常大的关系喔:
    1)系统会将常用的文件数据放置到主存储器的缓冲区,以加速文件系统的读/写;
    2)承上,因此 Linux 的物理内存最后都会被用光!这是正常的情况!可加速系统效能;
    3)你可以手动使用 sync 来强迫内存中配置为 Dirty 的文件回写到磁盘中;
    4)若正常关机时,关机命令会主动呼叫 sync 来将内存的数据回写入磁盘内;
    5)但若不正常关机(如跳电、死机或其他不明原因),由于数据尚未回写到磁盘内, 因此重新启动后可能会花很多时间在进行磁盘检验,甚至可能导致文件系统的损毁(非磁盘损毁)。
  7. 挂载点的意义 (mount point)
    每个 filesystem 都有独立的 inode / block / superblock 等信息,这个文件系统要能够链接到目录树才能被我们使用。 将文件系统与目录树结合的动作我们称为『挂载』。重点是:挂载点一定是目录,该目录为进入该文件系统的入口。 因此并不是你有任何文件系统都能使用,必须要『挂载』到目录树的某个目录后,才能够使用该文件系统的。
  8. 其他 Linux 支持的文件系统与 VFS
    虽然 Linux 的标准文件系统是 ext2 ,且还有添加了日志功能的 ext3 ,事实上,Linux 还有支持很多文件系统格式的, 尤其是最近这几年推出了好几种速度很快的日志式文件系统,包括 SGI 的 XFS 文件系统, 可以适用更小型文件的 Reiserfs 文件系统,以及 Windows 的 FAT 文件系统等等。
    常见的支持文件系统有:
    1)传统文件系统:ext2 / minix / MS-DOS / FAT (用 vfat 模块) / iso9660 (光盘)等等;
    2)日志式文件系统: ext3 / ReiserFS / Windows' NTFS / IBM's JFS / SGI's XFS
    3)网络文件系统: NFS / SMBFS
    想要知道你的 Linux 支持的文件系统有哪些,可以察看底下这个目录:
    Alt text
    系统目前已加载到内存中支持的文件系统则有:
    Alt text
    • Linux VFS (Virtual Filesystem Switch)
      Linux 的核心又是如何管理这些认识的文件系统呢? 其实,整个 Linux 的系统都是透过一个名为 Virtual Filesystem Switch 的核心功能去读取 filesystem 的。 也就是说,整个 Linux 认识的 filesystem 其实都是 VFS 在进行管理,我们使用者并不需要知道每个 partition 上头的 filesystem 是什么~
      Alt text
  9. 文件系统的简单操作
    • 磁盘与目录的容量
      df:列出文件系统的整体磁盘使用量;
      du:评估文件系统的磁盘使用量(常用在推估目录所占容量)
      • df
        Alt text
        由于 df 主要读取的数据几乎都是针对一整个文件系统,因此读取的范围主要是在 Superblock 内的信息, 所以这个命令显示结果的速度非常的快速!在显示的结果中你需要特别留意的是那个根目录的剩余容量! 因为我们所有的数据都是由根目录衍生出来的,因此当根目录的剩余容量剩下 0 时,那你的 Linux 可能就问题很大了。
        另外需要注意的是,如果使用 -a 这个参数时,系统会出现 /proc 这个挂载点,但是里面的东西都是 0 ,不要紧张! /proc 的东西都是 Linux 系统所需要加载的系统数据,而且是挂载在『内存当中』的, 所以当然没有占任何的硬盘空间。
        至于那个 /dev/shm/ 目录,其实是利用内存虚拟出来的磁盘空间! 由于是透过内存仿真出来的磁盘,因此你在这个目录底下创建任何数据文件时,访问速度是非常快速的!(在内存内工作) 不过,也由于他是内存仿真出来的,因此这个文件系统的大小在每部主机上都不一样,而且创建的东西在下次启动时就消失了! 因为是在内存中。
    • du
      Alt text
      与 df 不一样的是,du 这个命令其实会直接到文件系统内去搜寻所有的文件数据。在默认的情况下,容量的输出是以 KB 来设计的, 如果你想要知道目录占了多少 MB ,那么就使用 -m 这个参数即可。 如果你只想要知道该目录占了多少容量的话,使用 -s 就可以啦!
    • 实体链接与符号链接: ln
      在 Linux 底下的连结档有两种,一种是类似 Windows 的快捷方式功能的文件,可以让你快速的链接到目标文件(或目录); 另一种则是透过文件系统的 inode 连结来产生新档名,而不是产生新文件!这种称为实体链接 (hard link)。
      • Hard Link (实体链接, 硬式连结或实际连结)
        文件名只与目录有关,但是文件内容则与 inode 有关。
        hard link 只是在某个目录下新增一笔档名链接到某 inode 号码的关连记录而已。
        Alt text
        如果将读取到正确数据的方式画成示意图,就类似如下画面:
        Alt text
        最大的好处就是『安全』!如同上图中, 如果你将任何一个『档名』删除,其实 inode 与 block 都还是存在的!此时你可以透过另一个『档名』来读取到正确的文件数据喔!此外,不论你使用哪个『档名』来编辑, 最终的结果都会写入到相同的 inode 与 block 中,因此均能进行数据的修改哩!
        一般来说,使用 hard link 配置链接文件时,磁盘的空间与 inode 的数目都不会改变!由图中可以知道, hard link 只是在某个目录下的 block 多写入一个关连数据而已,既不会添加 inode 也不会耗用 block 数量。
        其实我们也能够知道,事实上 hard link 应该仅能在单一文件系统中进行的,应该是不能够跨文件系统才对! 因为图 2.2.1 就是在同一个 filesystem 上嘛!所以 hard link 是有限制的:
        1)不能跨 Filesystem;
        2)不能 link 目录。
      • Symbolic Link (符号链接,亦即是快捷方式)
        Symbolic link 就是在创建一个独立的文件,而这个文件会让数据的读取指向他 link 的那个文件的档名!由于只是利用文件来做为指向的动作, 所以,当来源档被删除之后,symbolic link 的文件会『开不了』, 会一直说『无法开启某文件!』。实际上就是找不到原始『档名』而已啦!
        Alt text
        连结档的重要内容就是他会写上目标文件的『文件名』, 你可以发现为什么上表中连结档的大小为 12 bytes 呢? 因为箭头(-->)右边的档名『/etc/crontab』总共有 12 个英文,每个英文占用 1 个 byes ,所以文件大小就是 12bytes了!
        Alt text
        这个 Symbolic Link 与 Windows 的快捷方式可以给他划上等号,由 Symbolic link 所创建的文件为一个独立的新的文件,所以会占用掉 inode 与 block。
        Alt text
        使用 ln 如果不加任何参数的话,那么就是 Hard Link。
        如果 ln 使用 -s 的参数时,就做成差不多是 Windows 底下的『快捷方式』的意思。
      • 关于目录的 link 数量
        他默认的 link 数量会是多少?当我们创建一个新目录名称为 /tmp/testing 时,基本上会有三个东西,那就是:1)/tmp/testing; 2)/tmp/testing/. 3)/tmp/testing/..。所以说,当我们创建一个新的目录时, 『新的目录的 link 数为 2 ,而上一级目录的 link 数则会添加 1 』
  10. 磁盘的分割、格式化、检验与挂载
    如果我们想要在系统里面新增一颗硬盘时,应该有哪些动作需要做的呢:
    1) 对磁盘进行分割,以创建可用的 partition ;
    2) 对该 partition 进行格式化( format ),以创建系统可用的 filesystem;
    3) 若想要仔细一点,则可对刚刚创建好的 filesystem 进行检验;
    4) 在 Linux 系统上,需要创建挂载点 ( 亦即是目录 ),并将他挂载上来;
    • 磁盘分区: fdisk
      Alt text
      Alt text
      只要离开 fdisk 时按下『q』,那么所有的动作『都不会生效!』相反的, 按下『w』就是动作生效的意思。
      Alt text
      使用『 p 』可以列出目前这颗磁盘的分割表信息,这个信息的上半部在显示整体磁盘的状态。
      这个磁盘共有 41.1GB 左右的容量,共有 5005 个磁柱,每个磁柱透过 255 个磁头在管理读写, 每个磁头管理 63 个扇区,而每个扇区的大小均为 512bytes ,因此每个磁柱为『 25563512 = 16065*512 = 8225280bytes 』。 fdisk 还可以直接秀出系统内的所有 partition 喔:
      Alt text
      这个 fdisk 只有 root 才能运行,此外,请注意, 使用的『装置文件名』请不要加上数字,因为 partition 是针对『整个硬盘装置』而不是某个 partition 呢!
      • 删除磁盘分区槽
        Alt text
      • 练习新增磁盘分区槽
        Alt text
        Alt text
        Alt text
        一般来说创建分割槽的形式会有底下的数种状况:
        1)1-4 号尚有剩余,且系统未有 extended:
        此时会出现让你挑选 Primary / Extended 的项目,且你可以指定 1~4 号间的号码;
        2)1-4 号尚有剩余,且系统有 extended:
        此时会出现让你挑选 Primary / Logical 的项目;若选择 p 则你还需要指定 1~4 号间的号码; 若选择 l(L的小写) 则不需要配置号码,因为系统会自动指定逻辑分割槽的文件名号码;
        3)1-4 没有剩余,且系统有 extended:
        此时不会让你挑选分割槽类型,直接会进入 logical 的分割槽形式。
      • 操作环境的说明
        以 root 的身份进行硬盘的 partition 时,最好是在单人维护模式底下比较安全一些, 此外,在进行 fdisk 的时候,如果该硬盘某个 partition 还在使用当中, 那么很有可能系统核心会无法重载硬盘的 partition table ,解决的方法就是将该使用中的 partition 给他卸除,然后再重新进入 fdisk 一遍,重新写入 partition table ,那么就可以成功啰!
      • 注意事项
        因为 SATA 硬盘最多能够支持到 15 号的分割槽, IDE 则可以支持到 63 号。
        另外需要特别留意的是,fdisk 没有办法处理大于 2TB 以上的磁盘分区槽! 高于 2TB 的磁盘系统应该会很常见!此时你就得使用 parted 这个命令了!
    • 磁盘格式化
      格式化的命令非常的简单,那就是『make filesystem, mkfs』
      • mkfs
        Alt text
        mkfs 其实是个综合命令而已,事实上如同上表所示,当我们使用『 mkfs -t ext3 ...』时, 系统会去呼叫 mkfs.ext3 这个命令来进行格式化的动作啦!
        在格式化为 Ext3 的范例中,我们可以发现结果里面含有非常多的信息,由于我们没有详细指定文件系统的细部项目, 因此系统会使用默认值来进行格式化。其中比较重要的部分为:文件系统的标头(Label)、Block的大小以及 inode 的数量,可使用 mke2fs 这个命令
      • mke2fs
        Alt text
        Alt text
        当没有指定 -j 的时候, mke2fs 使用 ext2 为格式化文件格式,若加入 -j 时,则格式化为 ext3 这个 Journaling 的 filesystem 呦!
    • 磁盘检验: fsck, badblocks
      • fsck
        Alt text
        注意:通常只有身为 root 且你的文件系统有问题的时候才使用这个命令,否则在正常状况下使用此一命令, 可能会造成对系统的危害!
        由于 fsck 在扫瞄硬盘的时候,可能会造成部分 filesystem 的损坏,所以『运行 fsck 时, 被检查的 partition 务必不可挂载到系统上!亦即是需要在卸除的状态喔!』
        ext2/ext3 文件系统的最顶层(就是挂载点那个目录底下)会存在一个『lost+found』的目录吧! 该目录就是在当你使用 fsck 检查文件系统后,若出现问题时,有问题的数据会被放置到这个目录中喔!
        我们的系统实际运行的 fsck 命令,其实是呼叫 e2fsck 这个软件啦! + badblocks
        Alt text
        刚刚谈到的 fsck 是用来检验文件系统是否出错,至于 badblocks 则是用来检查硬盘或软盘扇区有没有坏轨的命令! 由于这个命令其实可以透过『 mke2fs -c 装置文件名 』在进行格式化的时候处理磁盘表面的读取测试, 因此目前大多不使用这个命令啰!
    • 磁盘挂载与卸除
      不过要进行挂载前,你最好先确定几件事:
      1)单一文件系统不应该被重复挂载在不同的挂载点(目录)中;
      2)单一目录不应该重复挂载多个文件系统;
      3)要作为挂载点的目录,理论上应该都是空目录才是。
      如果你要用来挂载的目录里面并不是空的,那么挂载了文件系统之后,原目录下的东西就会暂时的消失。
      Alt text
      • 挂载Ext2/Ext3文件系统
        Alt text
        那么系统有没有指定哪些类型的 filesystem 才需要进行上述的挂载测试呢? 主要是参考底下这两个文件:
        ·/etc/filesystems:系统指定的测试挂载文件系统类型;
        ·/proc/filesystems:Linux系统已经加载的文件系统类型。
        我们 Linux 支持的文件系统之驱动程序都写在如下的目录中:/lib/modules/$(uname -r)/kernel/fs/
        Alt text
        以 /dev/hdc2 这个装置来说好了(上面表格的第一行), 他的意义是:『/dev/hdc2 是挂载到 / 目录,文件系统类型为 ext3 ,且挂载为可擦写 (rw) ,另外,这个 filesystem 有标头,名字(label)为 /1 』
      • 挂载 CD 或 DVD 光盘
        Alt text
        光驱一挂载之后就无法退出光盘片了!除非你将他卸除才能够退出! 另外,其实 /dev/cdrom 是个链接文件,正确的磁盘文件名得要看你的光驱是什么连接接口的环境。
      • 格式化与挂载软盘
        软盘的格式化可以直接使用 mkfs 即可。但是软盘也是可以格式化成为 ext3 或 vfat 格式的。 挂载的时候我们同样的使用系统自动测试挂载即可!Alt text
        整个 Linux 最重要的就是文件系统,而文件系统是直接挂载到目录树上头, 几乎任何命令都会或多或少使用到目录树的数据,因此你当然不可以随意的将光盘/软盘拿出来!
      • 挂载闪盘
        Alt text
      • 重新挂载根目录与挂载不特定目录
        整个目录树最重要的地方就是根目录了,所以根目录根本就不能够被卸除的!问题是,如果你的挂载参数要改变, 或者是根目录出现『只读』状态时,如何重新挂载呢?最可能的处理方式就是重新启动 (reboot)! 不过你也可以这样做:
        Alt text
        重点是那个『 -o remount,xx 』的选项与参数!请注意,要重新挂载 (remount) 时, 这是个非常重要的机制!尤其是当你进入单人维护模式时,你的根目录常会被系统挂载为只读,这个时候这个命令就太重要了!
        我们也可以利用 mount 来将某个目录挂载到另外一个目录去喔!这并不是挂载文件系统,而是额外挂载某个目录的方法!
        Alt text
        看起来,其实两者连结到同一个 inode 嘛! ^_^ 没错啦!透过这个 mount --bind 的功能, 您可以将某个目录挂载到其他目录去喔!而并不是整块 filesystem 的啦!
      • umount (将装置文件卸除)
        Alt text
        就是直接将已挂载的文件系统给他卸除即是!卸除之后,可以使用 df 或 mount -l 看看是否还存在目录树中?
        Alt text
        如果你遇到这样的情况:
        Alt text
        就『离开该文件系统的挂载点』即可
      • 使用 Label name 进行挂载的方法
        除了磁盘的装置文件名之外,其实我们可以使用文件系统的标头(label)名称来挂载喔!
        Alt text
        这种挂载的方法有一个很大的好处:『系统不必知道该文件系统所在的接口与磁盘文件名!』
    • 磁盘参数修订
      • mknod
        Linux 底下所有的装置都以文件来代表吧!就是透过文件的 major 与 minor 数值来替代的~所以,那个 major 与 minor 数值是有特殊意义的,不是随意配置的喔!
        Alt text
        上表当中 22 为主要装置代码 (Major) 而 0~6 则为次要装置代码 (Minor)。
        常见的硬盘文件名 /dev/hda 与 /dev/sda 装置代码如下所示:
        Alt text
        Alt text
      • e2label
        使用 Label name
        1)优点:不论磁盘文件名怎么变,不论你将硬盘插在哪个 IDE / SATA 接口,由于系统是透过 Label ,所以,磁盘插在哪个接口将不会有影响;
        2)缺点:如果插了两颗硬盘,刚好两颗硬盘的 Label 有重复的,那就惨了~ 因为系统可能会无法判断哪个磁盘分区槽才是正确的!
        Alt text
        你就不可以随意修改 Label 的名称了
      • tune2fs
        Alt text
        比较有趣的是,如果你的某个 partition 原本是 ext2 的文件系统,如果想要将他升级成为 ext3 文件系统的话,利用 tune2fs 就可以很简单的转换过来啰~
      • hdparm
        如果你的硬盘是 IDE 接口的,那么这个命令可以帮助你配置一些进阶参数!如果你是使用 SATA 接口的, 那么这个命令就没有多大用途了!目前的 Linux 系统都已经稍微优化过,所以这个命令最多是用来测试效能啦!
        Alt text
        如果你是使用 SATA 硬盘的话,这个命令唯一可以做的,就是最后面那个测试的功能而已啰!
        Alt text
    • 配置启动挂载
      • 启动挂载 /etc/fstab 及 /etc/mtab
        1)根目录 / 是必须挂载的﹐而且一定要先于其它 mount point 被挂载进来。
        2)其它 mount point 必须为已创建的目录﹐可任意指定﹐但一定要遵守必须的系统目录架构原则
        3)所有 mount point 在同一时间之内﹐只能挂载一次。
        4)所有 partition 在同一时间之内﹐只能挂载一次。
        5)如若进行卸除﹐您必须先将工作目录移到 mount point(及其子目录) 之外。
        让我们直接查阅一下 /etc/fstab 这个文件的内容吧!
        Alt text
        其实 /etc/fstab (filesystem table) 就是将我们利用 mount 命令进行挂载时, 将所有的选项与参数写入到这个文件中就是了。除此之外, /etc/fstab 还加入了 dump 这个备份用命令的支持! 与启动时是否进行文件系统检验 fsck 等命令有关。
        各个字段的详细数据如下:
        • 第一栏:磁盘装置文件名或该装置的 Label
          这个字段请填入文件系统的装置文件名。但是由上面表格的默认值我们知道系统默认使用的是 Label 名称!
        • 第二栏:挂载点 (mount point)
          一定是目录啊~
        • 第三栏:磁盘分区槽的文件系统
          在手动挂载时可以让系统自动测试挂载,但在这个文件当中我们必须要手动写入文件系统才行! 包括 ext3, reiserfs, nfs, vfat 等等。
        • 第四栏:文件系统参数
          mount 这个命令中谈到很多特殊的文件系统参数? 还有我们使用过的『-o iocharset=cp950』?这些特殊的参数就是写入在这个字段啦!
          Alt text
        • 第五栏:能否被 dump 备份命令作用
          dump 是一个用来做为备份的命令, 我们可以透过 fstab 指定哪个文件系统必须要进行 dump 备份! 0 代表不要做 dump 备份, 1 代表要每天进行 dump 的动作。 2 也代表其他不定日期的 dump 备份动作, 通常这个数值不是 0 就是 1 啦!
        • 第六栏:是否以 fsck 检验扇区
          启动的过程中,系统默认会以 fsck 检验我们的 filesystem 是否完整 (clean)。 不过,某些 filesystem 是不需要检验的,例如内存置换空间 (swap) ,或者是特殊文件系统例如 /proc 与 /sys 等等。所以,在这个字段中,我们可以配置是否要以 fsck 检验该 filesystem 喔。 0 是不要检验, 1 表示最早检验(一般只有根目录会配置为 1), 2 也是要检验,不过 1 会比较早被检验啦! 一般来说,根目录配置为 1 ,其他的要检验的 filesystem 都配置为 2 就好了。
          /etc/fstab 是启动时的配置文件,不过,实际 filesystem 的挂载是记录到 /etc/mtab 与 /proc/mounts 这两个文件当中的。
      • 特殊装置 loop 挂载 (映象档不刻录就挂载使用)
        • 挂载光盘/DVD映象文件
          Alt text
      • 创建大文件以制作 loop 装置文件
        • 创建大型文件
          Linux 底下我们有一支很好用的程序 dd !他可以用来创建空的文件喔!
          Alt text
          dd 就好像在迭砖块一样,将 512 块,每块 1MB 的砖块堆栈成为一个大文件 (/home/loopdev) ! 最终就会出现一个 512MB 的文件!
        • 格式化
          Alt text
        • 挂载
          Alt text
          Linux 上面的『虚拟机』的话, 也就是以一部 Linux 主机再切割成为数个独立的主机系统时,类似 VMware 这类的软件, 在 Linux 上使用 xen 这个软件,他就可以配合这种 loop device 的文件类型来进行根目录的挂载, 真的非常有用的。
  11. 内存置换空间(swap)之建置
    你可以使用如下的方式来创建你的 swap :1)配置一个 swap partition;2)创建一个虚拟内存的文件
    • 使用实体分割槽建置swap
      创建 swap 分割槽的方式也是非常的简单的!透过底下几个步骤就搞定:
      1)分割:先使用 fdisk 在你的磁盘中分割出一个分割槽给系统作为 swap 。由于 Linux 的 fdisk 默认会将分割槽的 ID 配置为 Linux 的文件系统,所以你可能还得要配置一下 system ID 就是了。
      2)格式化:利用创建 swap 格式的『mkswap 装置文件名』就能够格式化该分割槽成为 swap 格式啰
      3)使用:最后将该 swap 装置启动,方法为:『swapon 装置文件名』。
      4)观察:最终透过 free 这个命令来观察一下内存的用量吧!
      • 先进行分割的行为
        Alt text
      • 开始建置 swap 格式
        Alt text
      • 开始观察与加载看看吧!
        Alt text
    • 使用文件建置swap
      • 1.使用 dd 这个命令来新增一个 128MB 的文件在 /tmp 底下
        Alt text
        这样一个 128MB 的文件就建置妥当。
      • 2.使用 mkswap 将 /tmp/swap 这个文件格式化为 swap 的文件格式
        Alt text
      • 3.使用 swapon 来将 /tmp/swap 启动啰!
        Alt text
      • 4.使用 swapoff 关掉 swap file
        Alt text
    • swap使用上的限制
      swap 在被创建时,是有限制的:
      1)在核心 2.4.10 版本以后,单一 swap 量已经没有 2GB 的限制了,
      2)但是,最多还是仅能创建到 32 个 swap 的数量!
      3)而且,由于目前 x86_64 (64位) 最大内存寻址到 64GB, 因此, swap 总量最大也是仅能达 64GB 就是了!
  12. 文件系统的特殊观察与操作
    • boot sector 与 superblock 的关系
      将可安装启动信息的 boot sector (启动扇区) 独立出来,并非放置到 superblock 当中的!superblock 的大小为 1024 bytes;superblock 前面需要保留 1024 bytes 下来,以让启动管理程序可以安装。
      1)block 为 1024 bytes (1K) 时:
      Alt text
      2)block 大于 1024 bytes (2K, 4K) 时
      Alt text
    • 利用 GNU 的 parted 进行分割行为
      parted 可以直接在一行命令列就完成分割,是一个非常好用的命令:
      Alt text
      Alt text
  13. 重点回顾
    • 基本上 Linux 的正统文件系统为 Ext2 ,该文件系统内的信息主要有:
      superblock:记录此 filesystem 的整体信息,包括inode/block的总量、使用量、剩余量, 以及文件系统的格式与相关信息等;inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的 block 号码;block:实际记录文件的内容,若文件太大时,会占用多个 block 。
    • Ext2 文件系统的数据存取为索引式文件系统(indexed allocation)
    • 需要碎片整理的原因就是文件写入的 block 太过于离散了,此时文件读取的效能将会变的很差所致。 这个时候可以透过碎片整理将同一个文件所属的 blocks 汇整在一起。
    • Ext2文件系统主要有:boot sector, superblock, inode bitmap, block bitmap, inode table, data block 等六大部分。
    • data block 是用来放置文件内容数据地方,在 Ext2 文件系统中所支持的 block 大小有 1K, 2K 及 4K 三种而已
    • inode 记录文件的属性/权限等数据,其他重要项目为: 每个 inode 大小均固定为 128 bytes; 每个文件都仅会占用一个 inode 而已; 因此文件系统能够创建的文件数量与 inode 的数量有关;
    • 文件的 block 在记录文件的实际数据,目录的 block 则在记录该目录底下文件名与其 inode 号码的对照表;
    • 日志式文件系统 (journal) 会多出一块记录区,随时记载文件系统的主要活动,可加快系统复原时间;
    • Linux 文件系统为添加效能,会让主存储器作为大量的磁盘高速缓存;
    • 实体链接只是多了一个文件名对该 inode 号码的链接而已;
    • 符号链接就类似Windows的快捷方式功能。
    • 磁盘的使用必需要经过:分割、格式化与挂载,分别惯用的命令为:fdisk, mkfs, mount三个命令
    • 启动自动挂载可参考/etc/fstab之配置,配置完毕务必使用 mount -a 测试语法正确否;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值