`
leonzhx
  • 浏览: 767759 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

第八章 Linux 磁盘与文件系统管理

阅读更多

1.  Linux最传统的磁盘文件系统(filesystem)使用的是EXT2。

 

2.  因为每种操作系统所设定的文件属性/权限并不相同, 为了存放这些档案所需的数据,因此就需要将分区进行格式化,以成为操作系统能够利用的『文件系统格式(filesystem)』。

 

3.  windows 98 以前的微软操作系统主要的文件系统是 FAT (或 FAT16),windows 2000 以后的版本有所谓的 NTFS 文件系统,Linux 的正统文件系统则为 Ext2 (Linux second extended file system, ext2fs)。

 

4.  传统的磁盘与文件系统的应用中,一个分区就只能够被格式化成为一个文件系统,所以我们可以说一个 filesystem 就是一个 partition。但是由于新技术的出现,例如LVM与软件磁盘阵列(software raid), 这些技术可以将一个分区格式化为多个文件系统(例如LVM),也能够将多个分区合成一个文件系统(LVM, RAID)。所以说,目前我们在格式化时已经不再说成针对 partition 来格式化了, 通帯我们可以称呼一个可被挂载的数据为一个文件系统而不是一个分区。

 

5.  Linux的文件系统通帯会将权限与属性放置到 inode 中,而将实际数据放置到 data block 区块中。 另外,还有一个超级区块 (superblock) 会记录整个文件系统的整体信息,包括 inode 与 block 的总量、使用量、剩余量等:

    superblock:记录此 filesystem 的整体信息,包括inode/block的总量、使用量、剩余量, 以及文件系统的格式与相关信息等;

    inode:记录档案癿属性,一个档案占用一个inode,同时记录此档案的数据所在的 block 编号;

    block:实际记录档案的内容,若档案太大时,会占用多个 block 。

通过inode中记录的block编号,文件系统可以将文件存放的区块一下子读出来,这种数据存取方法我们称为索引式文件系统(indexed allocation)。下图中,灰色为inode,蓝色为block:



 

6.  优盘使用的文件系统一般为 FAT 格式。FAT 这种格式的文件系统没有 inode 存在,所以 FAT 没有办法将这个档案的所有 block 在一开始就读出来。每个 block 编号都记录在前一个 block 当中, 他的读取方式如下:



 

如果同一个档案数据写入的 block 分散得太过厉害时,则我们的磁盘读取头将无法在磁盘转一圈就读到所有的数据, 因此磁盘就会多转好几圈才能完整地读取到这个档案的内容。(因为无法按block 编号从小到大一次性读出数据,只有读取了前一个block才能知道下一个block的编号。)

 

7.  文件系统一开始就将 inode 与 block 规划好了,除非重新格式化(或者利用 resize2fs 等指令变更文件系统大小),否则 inode 与 block 固定后就不再变动。但是如果文件系统高达数百GB时, inode 与 block 的数量太庞大,将所有的 inode 与 block 通通放置在一起不易管理。 因此 Ext2 文件系统在格式化的时候基本上是区分为多个区块群组 (block group) 的,每个区块群组都有独立的 inode/block/superblock 系统:



 

在整体的规划中,文件系统最前面有一个启动扇区(boot sector),这个启动扇区可以安装开机管理程序, 这是个非帯重要的设计,因为如此一来我们就能够将不同的开机管理程序安装到个别的文件系统最前端,而不用覆盖整块硬盘唯一的 MBR, 这样也主能制作出多重引导的环境了。

 

8.  每一个Ext2文件系统的区块群组(block group)包含以下六个部分:

    1)  data block (数据区块),是用来放置档案内容数据的地方,在 Ext2 文件系统中所支持的 block 大小有 1K, 2K 及 4K 三种。在格式化时 block 的大小就固定了,且每个 block 都有编号。由于 block 大小的差异,会导致该文件系统能够支持的最大磁盘容量与最大单一档案容量并不相同:

Block 大小 1KB 2KB 4KB
最大单一档案限制 16GB 256GB 2TB
最大文件系统总容量 2TB 8TB 16TB

某些程序只能够支持小于 2GB 以下的档案,与文件系统无关。Ext2 文件系统的 block还有如下限制:

            a)  原则上,block 的大小与数量在格式化完就不能够再改了(除非重新格式化);

            b)  每个 block 内最多只能放置一个档案的数据;

            c)  如果档案大于 block 的大小,则一个档案会占用多个 block 数量;

            d)  若档案小于 block ,则该 block 的剩余容量就不能够再被使用了。

    2)  inode table (inode 表格), 基本上,inode 记录的档案数据至少有:

            a)  该档案的存取权限(read/write/excute);

            b)  该档案的拥有者与群组(owner/group);

            c)  该档案的容量;

            d)  该档案建立或状态、内容改变的时间(ctime);

            e)  最近一次的读取时间(atime);

            f)   最近内容修改的时间(mtime);

            g)  定义档案特性的标志(flag),如 SetUID...;

            h)  该档案真正内容的指向 (pointer);

inode 的数量与大小也是在格式化时就已经固定了的,并且:

            a)  每个 inode 大小均固定为 128 bytes;

            b)  每个档案都仅会占用一个 inode 而已;

            c)  文件系统能够建立的档案数量与 inode 的数量有关;

            d)  系统读取档案时需要先找到 inode,并分析 inode 所记录的权限与用户是否符合,若符合才能开始实际读取 block 的内容。

inode 记录一个 block 编号要花 4byte,系统将 inode 记录 block 号码的区域定义为12个直接,一个间接, 一个双间接与一个三间接记录区:



当文件系统将 block 格式化为 1K 大小时,单个文件最大容量为直接、间接、双间接、三间接加总,得到 12*1 + 256*1 + 256*256*1 + 256*256*256*1  = 16GB ( 256为每个block可以记录的block编号数:1000/4),但这个计算方法不能用在 2K 及 4K block 大小的计算中, 因为大于 2K 的 block 将会受到 Ext2 文件系统本身的限制,所以计算的结果会不太符合。

    3)  Superblock (超级区块):记录整个 filesystem 相关信息的地方,它记录的信息主要有:

            a)  block 与 inode 的总量;

            b)  未使用与已使用的 inode / block 数量;

            c)  block 与 inode 的大小 (block 为 1, 2, 4K,inode 为 128 bytes);

            d)  filesystem 的挂载时间、最近一次写入数据的时间、最近一次检验磁盘 (fsck) 的时间等;

            e)  一个 valid bit 数值,若此文件系统已被挂载,则 valid bit 为 0 ,若未被挂载,则 valid bit 为 1;

一般来说, superblock 大小为 1024bytes。除了第一个 block group 内会含有 superblock 外,后续的 block group 不一定含有 superblock , 而若含有 superblock 则该 superblock 主要是作为第一个 block group 内 superblock 的备份。

    4)  Filesystem Description (文件系统描述说明):描述每个 block group 的开始与结束的 block 号码,以及说明每个区段 (superblock, bitmap, inodemap, data block) 分别介于哪一个 block 号码之间。

    5)  block bitmap (区块对照表):从 block bitmap 当中可以知道哪些 block 是空的,哪些block已经被使用了。

    6)  inode bitmap (inode 对照表):与 block bitmap 类似,记录已使用与未使用的 inode 号码。

 

9.  每个区段与 superblock 的信息都可以使用 dumpe2fs 这个指令来查询:

 

dumpe2fs [-bh] 装置文件名

 利用 dumpe2fs 可以查询到非常多的信息,依内容主要可以区分为上半部是 superblock 内容, 下半部则是每个 block group 的信息。-b 选项可以列出保留为坏轨的部分,-h 仅列出 superblock 的数据,而不列出其他区段的内容。

 

 

10.  当我们在 Linux 下的 ext2 文件系统建立一个目录时, ext2 会分配一个 inode 与至少一块 block 给该目录。其中,inode 记录该目录癿相关权限与属性,以及分配到的那块 block 号码; 而 block 则是记录在这个目录下的文件名与该文件名占用的 inode 号码数据。如果想要观察档案所占用的inode 号码,可以使用 ls -i 这个选项。

 

11.  因为文件名是记录在目录的 block 当中, 因此当我们要读取某个档案时,就务必会经过目录的 inode 与 block ,然后才能找到那个待读取档案的 inode 号码, 最终才会读到正确的档案的 block 内的数据。

 

12.  虽然 ext2 在 inode 处已经将该档案所记录的 block 号码都记上了, 所以资料可以一次性读取,但是如果档案真的太过离散,确实还是会发生读取效率低下的问题。 因为磁盘读取头还是得要在整个文件系统中来来去去地频繁读取。果真如此,那可以将整个 filesystme 内的数据全部复制出来,将该 filesystem 重新格式化, 再将数据复制回去即可解决这个问题。如果 filesystem 真的太大了,那当一个档案被记录在这个文件系统的最前面与最后面的 block 号码中, 此时会造成硬盘的机械臂移动幅度过大,也会造成数据读取效能的低落。而且读取头在搜寻整个 filesystem 时, 也会花费比较多的时间。因此, partition 的规划不是越大越好, 而是真要针对主机用途来进行。

 

13.  用户只有对目录同时具有 w 与 x 的权限,才能在该目录下新增档案。

 

14.  我们将 inode table 与 data block 称为数据存放区域,其他例如 superblock、 block bitmap 与 inode bitmap 等区段就被称为 metadata。

 

15.  日志式文件系统 (Journaling filesystem)会规划出一个区块,该区块专门记录写入或修改档案时的步骤:

    1)  预备:当系统要写入一个档案时,会先在日志记录区块中记录某个档案准备要写入的信息;

    2) 实际写入:开始写入档案的权限与数据;开始更新 metadata 的数据;

    3) 结束:完成数据与 metadata 的更新后,在日志记录区块当中完成该档案的记录。

万一数据的记录过程发生了问题,那我们的系统只要去检查日志记录区块, 就可以知道哪个档案发生了问题,针对该问题来做一致性的检查即可,而不必针对整个 filesystem 去检查。

 

16.  ext3 是 ext2 的升级版本,有如下四个理由使用它:可利用性、数据完整性、速度及易于转换。“可利用性”意味着从系统中止到快速重新复原而不是持续地让e2fsck执行长时间的修复。“数据完整性”意味着可以避免数据毁损。“速度”是指除了写入若干数据超过一次时,ext3往往会较ext2快,因为ext3的日志使硬盘读取头的移动能更有效地迚行。“易于转换”则是指可以轻易地从ext2变更到ext3来获得一个强而有力的日志式文件系统而不需要重新做格式化。

 

17.  Linux 系统上文件系统与内存有非常大的关系:

    1)  系统会将常用的档案数据放置到主存储器的缓冲区,以加速文件系统的读/写;

    2)  因此 Linux 的物理内存最后都会被用光!这是正常的情况,可加速系统效能;

    3)  你可以手动使用 sync 来强迫内存中设定为 Dirty 的档案回写到磁盘中;

    4)  若正常关机,关机指令会主动呼叫 sync 来将内存的数据回写入磁盘内;

    5)  但若非正常关机(如跳电、当机或其他不明原因),由于数据尚未回写到磁盘内, 因此重新启动后可能会花很多时间在进行磁盘检验,甚至可能导致文件系统的损毁(非磁盘损毁)。

 

18.  每个 filesystem 都有独立的 inode / block / superblock 等信息,这个文件系统要能够链接到目录树才能被我们使用。挂载点一定是目录,该目录为进入该文件系统的入口。filesystem 最顶层的目录之 inode 一般为 2 号。

 

19.  常见的Linux支持的文件系统有:

    1)  传统文件系统:ext2 / minix / MS-DOS / FAT (用 vfat 模块) / iso9660 (光盘)等等;

    2)  日志式文件系统: ext3 / ReiserFS / Windows' NTFS / IBM's JFS / SGI's XFS

    3)  网络文件系统: NFS / SMBFS

想要知道你的 Linux 支持的文件系统有哪些,可以执行以下命令:

 

# ls -l /lib/modules/$(uname -r)/kernel/fs

查看系统目前已加载到内存中支持的文件系统:

 

 

# cat /proc/filesystems

 

 

20.  整个 Linux 的系统都是透过一个名为 Virtual Filesystem Switch 的核心功能去读取 filesystem 的。 也就是说,整个 Linux 认识癿 filesystem 其实都是 VFS 在进行管理的。



 

21.  更多关于Ext2/Ext3 文件系统的信息可以参考:http://linux.vbird.org/linux_basic/1010appendix_B.php

 

22.  df用于列出文件系统的整体磁盘使用量:

 

df [-ahikHTm] [目录或文件名]

选项说明如下:

 

选项 功能
-a 列出所有的文件系统,包括系统特有的 /proc 等文件系统
-k 以 KBytes 的容量显示各文件系统
-m 以 MBytes 的容量显示各文件系统
-h 以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示
-H 以 M=1000K 取代 M=1024K 的进位方式
-T 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出
-i 不用硬盘容量,而以 inode 的数量来显示

 

由于 df 主要读取的数据几乎都是针对一整个文件系统,因此读取的范围主要是在 Superblock 内的信息, 所以这个指令显示结果的速度非常快。

 

23.  /dev/shm//run/shm)目录是利用内存虚拟出来的磁盘空间,因此你在这个目录下建立任何数据文件时,访问速度是非常快的。但是,也由于他是内存仿真出来的,因此这个文件系统的大小在每部主机上都不一样,而且建立的东西在下次开机时就会消失。

 

24.  du可以评估文件系统的磁盘使用量(常用于估算目录所占容量):

 

du [-ahskm] 档案或目录名称

 选项说明如下:

 

 

选项 功能
-a 列出所有档案与目录的容量,因为默认仅列出目录容量而已
-k 以 KBytes 的容量显示各文件系统
-m 以 MBytes 的容量显示各文件系统
-h 以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示
-s 列出总量而已,而不列出每个子目录占用的容量
-S 列出的容量不包括子目录的容量

df 不同的是,du 这个指令其实会直接到文件系统内去搜寻所有的档案数据。

 

25.  在 Linux 下的连结档有两种,一种是类似 Windows 的快捷方式功能的档案,可以让你快速地链接到目标档案(或目彔),被称为符号链接(symbolic link);另一种则是通过文件系统的 inode 连结来产生新档名,而不是产生新档案,这种称为实体链接 (hard link):

    1)  Hard Link (实体链接, 硬式连结或实际连结):是指有多个档名对应到同一个 inode 号码。简单地说,hard link 只是在某个目录下新增一笔档名链接到某 inode 号码的关连记录而已。



 

上图所示,你可以透过 1 或 2 的目录之inode 指定的 block 找到两个不同的档名,而不管使用哪个档名均可以指到 real 那个 inode 去读取到最终数据。这样做最大的好处就是『安全』, 如果你将任何一个『档名』删除,其实 inode 与 block 都还是存在的。hard link 有如下限制:

            a)  不能跨 Filesystem;

            b)  不能 link 目录。

    2)  Symbolic Link (符号链接,亦即是快捷方式):Symbolic link 就是在建立一个独立的档案(新的 inode),而这个档案block的数据会记录它 link 的那个档案的档名。由于只是利用档案来做为指向的动作, 所以,当来源档被删除之后,symbolic link 的档案会无法打开。



如上图所示,1 号 inode 读取到连结档的内容仅有档名,根据档名链接到正确的目录去读取目标档案的 inode , 最终就能够读取到正确的数据了。如果目标档案(/etc/crontab)被删除了,那整个环节就会无法继续进行下去, 所以就会无法通过连结档读取文件了。

 

26. 要制作连结档就可以使用 ln 这个指令:

ln [-sf] 来源文件 目标文件

-s 选项用来建立符号链接,默认是hard link,-f 选项表示如果目标文件存在时,就自动地将目标文件直接移除后再建立。

 

27.  当我们建立一个新的目录时, 『新的目录的 link 数为 2 (./),而上层目录的 link 数则会增加 1 (../) 』。

 

28.  fdsik指令可以对磁盘进行划分:

 

#fdisk [-l] 装置名称

 -l 选项会输出后面接的装置的所有的 partition 内容。若仅有 fdisk -l 时, 则系统将会把整个系统内能够搜索到的装置的 partition 均列出来。fdisk指令执行后会进入它的命令行模式,m键可以查看命令帮助,q键会不保存改动而退出,w键会保存改动退出。fdisk 只有 root 才能执行,此外,使用的『装置文件名』不要加上数字,因为 partition 是针对『整个硬盘装置』而不是某个 partition。所以执行『 fdisk /dev/hdc1 』 就会出错。

 

 

29.  fdisk最终将改动写入分割表后,由于我们的磁盘无法卸载旧的分区表信息(因为含有根目录),所以会让核心无法加载新的分区表信息,此时你可以直接使用 reboot 来处理, 也可以使用 GNU 推出的工具程序 partprobe。这个指令仅是告知核心必须要读取新的分区表而已,因此不会在屏幕上出现任何信息。

 

30.  以 root 的身份进行硬盘的 partition 时,最好是在单人维护模式下比较安全一些。此外,在进行 fdisk 的时候,如果该硬盘某个 partition 还在使用当中, 那很有可能系统核心会无法重载硬盘的 partition table ,解决的方法就是将该使用中的 partition 卸载,然后再重新进入 fdisk 一遍,重新写入 partition table。

 

31.  fdisk 无法处理大于 2TB 以上的磁盘分区。因为虽然 Ext3 文件系统已经支持达到 16TB 以上的磁盘,但是分区指令却无法支持。此时你就得使用 parted 这个指令了。

 

32.  文件系统格式化的指令是『make filesystem, mkfs』:

# mkfs [-t 文件系统格式] 装置文件名

-t 选项可以接文件系统格式,例如 ext3, ext2, vfat 等(系统有支持才会生效)。mkfs 其实是个综合指令,当我们使用『 mkfs -t ext3 ...』时, 系统会去调用 mkfs.ext3 这个指令来进行格式化。

 

 

33.  Ext2/Ext3 格式的公用格式化指令是 mke2fs:(等同于mkfs -t ext2/ext3)

 

# mke2fs [-b block大小] [-i inode大小] [-L 标头] [-cj] 装置

选项说明如下:

选项

功能

-b

可以设定每个 block 的大小,目前支持 1024, 2048, 4096 bytes 三种;

-i

可以设定多少容量给予一个 inode。(平均多少容量一个inode)

-c

检查磁盘错误,仅下达一次 -c 时,会进行快速读取测试;

如果下达两次 -c -c 的话,会测试读写(read-write),会很慢

-L

后面可以接标签名称 (Label),

-j

本来 mke2fs 是 EXT2 ,加上 -j 后,会主动加入 journal 而成为 EXT3。

 

 

34.  fsck指令(Filesystem Check)是用来检查与修正文件系统错误的:

# fsck [-t 文件系统] [-ACay] 装置名称

 选项说明如下:

 

选项 功能
-t 指定文件系统类型
-A 依据 /etc/fstab 的内容,将需要的装置扫瞄一次。通常开机过程中会执行此一指令。
-a

自动修复检查到的有问题的扇区。

-y 与 -a 类似,但是某些 filesystem 仅支持 -y 这个参数。
-C 在检验的过程中,使用一个直方图来显示目前的进度。
EXT2/EXT3 的额外选项:(e2fsck 指令所提供)
-f 强制检查。一般来说,如果 fsck 没有发现任何 unclean 的标志,不会主动进入详细检查。
-D 针对文件系统下的目录进行优化配置。
 如同 mkfs 一样,fsck 也是个综合指令,使用时也需要指定文件系统类型。但现在的Linux会自动地通过 superblock 去分辨文件系统, 因此通常可以不要这个选项。由于fsck 在扫瞄硬盘的时候,可能会造成部分 filesystem的损坏,所以『执行 fsck 时, 被检查的 partition 务必不可挂载到系统上,亦即是需要在卸载的状态。』ext2/ext3 文件系统的最顶层会存在一个『lost+found』的目录,该目录就是在当你使用 fsck 检查文件系统后,若出现问题时,有问题的数据会被放置到这个目录中。
 
35.  badblocks 指令是用来检查硬盘扇区有没有坏轨的。这个指令其实可以通过『 mke2fs -c 装置文件名 』在进行格式化的时候检查硬盘,因此目前大都不使用这个指令。语法如下:
# badblocks -[svw] 装置名称
 -v 选项可以在屏幕上看到检查的进度,-w 选项会使用写入的方式来测试,建议不要使用此选项,尤其是待检查的装置已有档案时。
 
36.  要进行挂载前,最好先确定以下几点:
    1)  单一文件系统不应被重复挂载在不同的挂载点(目录)中;
    2)  单一目录不应重复挂载多个文件系统;
    3)  要作为挂载点的目录,理论上应该都是空目录才是。
如果你要用来挂载的目录不是空的,那挂载了文件系统之后,原目录下的东西就会暂时被隐藏掉。
 
37.  将文件系统挂载到 Linux 系统上,可以使用 mount 这个指令:
# mount -a
# mount [-l]
# mount [-t 文件系统] [-L Label名] [-o 额外选顷] [-n] 装置文件名 挂载点
 选项说明如下:
选项 功能
-a 依照配置文件 /etc/fstab 的数据将所有未挂载的磁盘都挂载上来
-l 单纯输入 mount 会显示目前挂载的信息。加上 -l 可增列 Label 名称
-t

mkfs 的选项类似,可以加上文件系统种类来指定欲挂载的类型。

-n

在默认的情况下,系统会将实际挂载的情况实时写入 /etc/mtab 中。但在某些情况下

(例如单人维护模式)为了避免问题,会刻意不写入。 此时就得要使用这个 -n 选项了。

-L 系统除了利用装置文件名外,还可以利用文件系统的标签名称 (Label)来进行挂载。
-o

后面可以接一些挂载时额外加上的参数:

ro, rw: 挂载文件系统成为只读(ro) 或可擦写(rw)

async, sync: 此文件系统是否使用同步写入 (sync) 或异步 (async) 的内存机制默认为 async。

auto, noauto: 允许此 partition 被以 mount -a 自动挂载(auto)

dev, nodev: 是否允许此 partition 上建立装置档案。dev 为可允许

suid, nosuid: 是否允许此 partition 含有 suid/sgid 的文件格

exec, noexec: 是否允许此 partition 上含有可执行 binary 档案

user, nouser: 是否允许此 partition 让任何使用者执行 mount。一般来说,mount 仅有 root 可

以执行,但下达 user 参数,则可让一般 user 也能够对此 partition 进行 mount

defaults: 默认值为:rw, suid, dev, exec, auto, nouser, 以及 async

remount: 重新挂载,这在系统出错,或重新更新参数时,很有用

由于文件系统几乎都有 superblock ,Linux 可以通过分析 superblock 搭配 Linux 自己的驱动程序去测试挂载, 如果成功地匹配了,就立刻自动地使用该类型的文件系统挂载起来。Linux主要参考以下两个档案来决定哪些类型的 filesystem 才需要进行上述的挂载测试:

    1)  /etc/filesystems:系统指定的测试挂载文件系统类型;

    2)  /proc/filesystems:Linux系统已经加载的文件系统类型。

Linux 支持的文件系统的驱动程序在如下的目录中:

    /lib/modules/$(uname -r)/kernel/fs/

 

38.  NTFS 文件系统官网:http://www.linux-ntfs.org/

       CentOS 5.x 版的相关驱动程序下载页面:http://www.linux-ntfs.org/doku.php?id=redhat:rhel5

 

39.  如果你的挂载参数要改变,或者是根目录出现『只读』状太时,可以重新挂载:

# mount -o remount,rw,auto /

 尤其当你进入单人维护模式时,你的根目录常会被系统挂载为只读,这个时候这个指令就太重要了。

 

40.  我们也可以利用 mount 来将某个目录挂载到另外一个目录去,虽然也可以使用 symbolic link 来连结,不过在某些不支持符号链接的程序运作中,还是得要通过这样的方法才行:

# mkdir /mnt/home
# mount --bind /home /mnt/home
# ls -lid /home/ /mnt/home
2 drwxr-xr-x 6 root root 4096 Sep 29 02:21 /home/ 
2 drwxr-xr-x 6 root root 4096 Sep 29 02:21 /mnt/home

虽然inode号相同,但link数却不会增加。

 

41.  umount 指令可以将装置档案卸载:

# umount [-fn] 装置文件名或挂载点

 -f 选项为强制卸载,可用在类似网络文件系统 (NFS) 无法读取到的情况下;-n 选项会在不更新 /etc/mtab 的情况下卸载。如果要卸载目录的话,一定要用挂载点来卸载。

 

42.  除了磁盘的装置文件名,我们还可以使用文件系统的标签(label)名来挂载。(可以使用 dumpe2fs 这个指令来查询标签名):

# dumpe2fs -h /dev/hdc6
Filesystem volume name: vbird_logical
......
# mount -L "vbird_logical" /mnt/hdc6

 

43.  装置档案的 major 与 minor 数值可以通过ls -l来查看:

 

# ll /dev/hdc*
brw-r----- 1 root disk 22, 0 Oct 24 15:55 /dev/hdc
brw-r----- 1 root disk 22, 1 Oct 20 08:47 /dev/hdc1
brw-r----- 1 root disk 22, 2 Oct 20 08:47 /dev/hdc2
brw-r----- 1 root disk 22, 3 Oct 20 08:47 /dev/hdc3
brw-r----- 1 root disk 22, 4 Oct 24 16:02 /dev/hdc4
brw-r----- 1 root disk 22, 5 Oct 20 16:46 /dev/hdc5
brw-r----- 1 root disk 22, 6 Oct 25 01:33 /dev/hdc6
 上表当中 22 为主要装置代码 (Major) 而 0~6 则为次要装置代码 (Minor)。 要知道更多核心支持的硬件装置代码 (major, minor) 请参考:http://www.kernel.org/pub/linux/docs/device-list/devices.txt

 

 

43.  Linux 核心 2.6 版以后,硬件文件名已经都可以被系统自动地实时产生了,我们根本不需要手动建立装置档案。不过某些情况下,例如在某些服务被关到特定目录下时(chroot), 就需要这样做了:

 

# mknod 装置文件名 [bcp] [Major] [Minor]
 参数说明如下:

 

选项

功能

b

设定装置名称成为一个周边储存设备档案,例如硬盘等;

c

设定装置名称成为一个周边输入设备档案,例如鼠标/键盘等;

p

设定装置名称成为一个 FIFO 档案;

Major

主要装置代码;

Minor

次要装置代码;

 

44.  如果格式化完毕后想要修改文件系统的标签,可以用 e2label 指令来修改。

 

# e2label 装置名称 新的Label名称
 

 

45.  tune2fs指令有很多功能,具体可以查阅man tune2fs

 

# tune2fs [-jlL] 装置代号
 -l 选项类似 dumpe2fs -h 的功能,将 superblock 内的数据读出来;-j 选项会将 ext2 的 filesystem 转换为 ext3 的文件系统;-L类似 e2label 的功能,可以修改 filesystem 的 Label。

 

 

46.  hdparm指令可以显示/设定硬盘的一些参数,并能测试硬盘的读写性能:

 

# hdparm [-iTt] 装置名称
 -i 选项将核心侦测到的硬盘参数显示出来;-T 选项测试缓冲区 cache 的存取效能; -t 选项测试硬盘的实际存取效能。

 

 

47.  系统挂载的一些限制:

    1)  根目录 / 是必须挂载的﹐而且一定要先于其它 mount point 被挂载进来。

    2)  其它 mount point 必须为已建立的目录﹐可任意指定。

    3)  所有 mount point 在同一时间内﹐只能挂载一次。

    4)  所有 partition 在同一时间内﹐只能挂载一次。

    5)  如要卸载﹐必项先将工作目录移出 mount point(及其子目录)之外。

 

48.  /etc/fstab (filesystem table) 就是将 mount 指令进行挂载时, 所用到的选项与参数写入到这个档案中。/etc/fstab 还加入了 dump 这个备份用指令的支持以及开机时是否进行文件系统检验 fsck 等指令。 这个档案的内容一般有六个字段:

    1)  磁盘装置文件名或该装置的 Label,如果是Label,则格式为:LABEL=value

    2)  挂载点 (mount poin)

    3)  磁盘分区的文件系统类型

    4)  文件系统参数,与 mount 指令-o选项后指定的参数一样,如果用默认值,可以设定为defaults

    5)  能否被 dump 备份指令作用,0 代表不要做 dump 备份, 1 代表要每天进行 dump 的动作。

    6)  是否以 fsck 检验扇区,开机的过程中,系统默认会以 fsck 检验 filesystem 是否完整 (clean)。不过,某些 filesystem 是不需要检验的,例如内存置换空间 (swap) ,或特殊文件系统例如 /proc/sys 等等。0 是不要检验, 1 表示最早检验, 2 也是要检验,但比 1 会较晚被检验。一般,根目录设定为 1 ,其它要检验的 filesystem 都设定为 2 。 /etc/fstab 是开机时的配置文件,实际 filesystem 的挂载是记录到 /etc/mtab/proc/mounts 这两个档案中的。每次我们在更改 filesystem 的挂载时,也会同时更新这两个档案。/etc/fstab设定完毕后务必使用 mount -a 测试语法正确与否。

 

49.  要挂载光盘/DVD镜像文件的话:

 

# mount -o loop /root/centos5.2_x86_64.iso /mnt/centos_dvd
镜像被挂载后也可以在这个档案内修改档案,这也是为什么很多镜像文件提供后,还要提供验证码 (MD5) 给使用者确认该镜像文件没有被修改过。

 

 

50.  以下步骤可以建立一个loop装置档案来进行挂载:

    1)  建立大型档案:

 

# dd if=/dev/zero of=/home/loopdev bs=1M count=512
 if 是 input file 的意思,输入档案。那个 /dev/zero 是会一直输出 0 的装置。of 是 output file 的意思,将一堆零写入到后面接的档案中。bs 是每个 block 大小,就像文件系统那样的 block 。count 则是总共几个 block 的意思。dd 就好像在迭砖块一样,将 512 块,每块 1MB 的砖块堆成一个大档案。

 

    2)  格式化该大档案:

 

# mkfs -t ext3 /home/loopdev
    3)  挂载该loop装置:

 

 

# mount -o loop /home/loopdev /media/cdrom/
  

 

51.  swap 的功能就是在应付物理内存不足的情况下所造成的内存延伸记录的功能。在个人计算机的使用上不设定 swap 也没有什么太大的问题。但服务器就不一样了,由于你不知道何时会有大量来自网络的请求,因此你最好能够预留一些 swap 来缓冲一下系统的内存用量。

 

52.  以下步骤可要建立 swap 并启动它:

    1)  建立一个大文件或使用 fdisk 划分一个分区作为 swap 。(在使用fdisk时,默认分区类型System ID会被设为Linux文件系统 83,需要将其修改为swap,82

    2)  格式化:利用建立 swap 格式的指令『mkswap 装置文件名/大文件名』就能够格式化该分区或大文件成为 swap 格式。

    3)  使用:将该 swap 装置启动,方法为:『swapon 装置文件名』。swapon -s 可以显示当前系统使用的swap,swapoff 装置文件名 可以停用swap分区。

通过 free 指令可以来观察内存的使用情况。

 

53. superblock 和 boot sector 的大小都为 1024 bytes。如果 block 大小刚好是 1024 bytes的话,那么 boot sector 与 superblock 各会占用掉一个 block,boot sector 是独立于 superblock ,在superblock之前的:



 

如果 block 大于 1024 bytes的话,第一个 block 内就含有 boot sector 与 superblock 两者:




54.  parted 可以直接用一行指令就完成分区:

# parted [装置] [指令 [参数]]

 指令功能:

    1)  新增分区:mkpart [primary|logical|extended] [ext3|vfat] 开始 结束

          开始为起始Cylindar在这颗磁盘的多少 KB/MB/GB,结束类似

    2)  打印分区表 :print

    3)  删除分区:rm [partition序号]

除非你有使用到大于 2TB 以上的磁盘, 否则请用 fdisk 这个程序来进行分区。

 

55.  Filesystem How-To: http://tldp.org/HOWTO/Filesystems-HOWTO-6.html

       John's spec of the second extended filesystem: http://uranus.it.swin.edu.au/~jn/explore2fs/es2fs.htm

       Design and Implementation of the Second Extended Filesystem: http://e2fsprogs.sourceforge.net/ext2intro.html

       The Second Extended File System - An introduction: http://www.freeos.com/articles/3912/

        ext3 or ReiserFS?  http://www.linuxplanet.com/linuxplanet/reports/3726/1/

 

  • 大小: 63.1 KB
  • 大小: 43.1 KB
  • 大小: 32.9 KB
  • 大小: 208.9 KB
  • 大小: 16.3 KB
  • 大小: 8.3 KB
  • 大小: 8.4 KB
  • 大小: 5.2 KB
  • 大小: 5.3 KB
分享到:
评论

相关推荐

    Linux操作系统学习

    第0章 计算机概论 ...第8章 Linux磁盘与文件系统管理 第9章 档案与文件系统的压缩与打包 第10章 vim程序编辑器 第11章 认识与学习BASH 第12章 正规表示法与文件格式化处理 第13章 学习Shell Scripts ........

    鸟哥的Linux私房菜基础学习篇(第二版PDF)02

     第8章 Linux磁盘与文件系统管理   第9章 文件的压缩与打包  第三部分 学习Shell和Shell脚本  第10章 vi文字处理器   第11章 认识Bash Shell   第12章 正则表达式   第13章 学习Shell脚本  第四...

    鸟哥的私房菜.pdf

    第8章 Linux磁盘与文件系统管理 第9章 文件与文件系统的压缩与打包 第三部分 学习shell与shell script 第10章 vim程序编辑器 第11章 认识与学习bash 第12章 正则表达式与文件格式化处理 第13章 学习shell ...

    鸟哥的 Linux 私房菜第08章-Linux 磁盘与硬件管理1

    第八章、Linux 磁盘与文件系统管理最近更新日期:2009/04/01系统管理员很重要的任务之一就是管理好自己的磁盘文件系统,每个分割槽不可太大也不能太小,

    Linux(红帽)操作系统9.0版本学习资料

    用户和组管理、第八章Linux文件系统权限、第九章管理Linux的联网、第十章管理Linux软件包和进程、第十一章 磁盘管理。 2、适合人群:目前学习Linux的人群(属于Linux学习的基础,所必要了解的东西) 3、能学到什么?...

    linux操作系统应用与维护视频教程详细完整版

    第九章:linux磁盘管理 第二部分:Linux操作系统管理与维护 第一章:vi编辑器 第二章:linux核心参数 第三章:udev介绍 第四章:软件管理 第五章:模块管理 第六章:文件系统 第七章:secure shell 第八章:网络管理...

    linux系统与网络管理教程.txt

    第8章 远程登录管理.wmv 第9章 TCPIP网络基础. wmv 第10章 Samba服务器配置.wny 第11章Proxy服务器配置.wmny 第12章 数据库服务器.wmv 第13章Apache服务器.wmvy 第14章FTP服务器配置. wmy 第15章 NFS服务器配置. wnv...

    Linux基本操作ppt

    linux课件的全部ppt,欢迎下载。 主要讲解目录: 第1章 Linux系统安装及基本操作.ppt 第2章 管理文件和目录.ppt 第3章 安装及管理应用程序.ppt ...第8章 编写Shell管理脚本(二).ppt 第9章 系统故障分析与排查.ppt

    LINUX系统管理白皮书

    对于面向所有主流Linux子系统的支持与管理任务,本书都进行了恰到好处的讲解。涵盖的主题包括文件系统、目录、引导和关机、打印、网络兼容性、网络应用、网络登录、安全、用户账号、数据备份等等。此外,还针对TCP/...

    centos系统管理

    1~5章为基础篇,分别为—— ...第八章 磁盘管理和LVM管理; 第九章 文件系统管理; 第十章 TCP/ip网络设置; 第十一章 CentOS系统引导和启动; 第十二章 守护进程管理; 第十三章 系统监控; 第十四章 备份与恢复

    CentOS系统管理

    第一章 Linux与开源软件;...第八章 磁盘管理和LVM管理; 第九章 文件系统管理; 第十章 TCP/ip网络设置; 第十一章 CentOS系统引导和启动; 第十二章 守护进程管理; 第十三章 系统监控; 第十四章 备份与恢复

    linux入门教程

    第八章 Linux磁盘管理 第九章 文本编辑工具vim 第十章 文档的压缩与打包 第十一章 安装RPM包或者安装源码包 第十二章 学习shell脚本之前的基础知识 第十三章 正则表达式 第十四章 SHELL 脚本 第十五章 linux系统日常...

    linux系统教程

    3.4 Linux磁盘管理 26 第四章 远程登录和PAM 30 4.1 OpenSSH 30 4.1.1 OpenSSH的安装 30 4.1.2 OpenSSH服务器的配置 30 4.1.3 使用ssh命令登录SSH服务器 30 4.2 Telnet服务 31 4.3 插入式身份认证模块 32 第五章 ...

    LinuxPDF最全学习资料,从安装到大神,运维必备

    Q第十八章 Linux网络管理技术 R第十九章 Shell脚本的基础 。。。。 U第二十二章 跳出循环-shift参数左移-函数的使用 V第二十三章 expect-正则表达式-sed-cut的使用 W第二十四章 Shell中色彩处理和awk使用技巧 。。。

    LINUX操作系统(电子教案,参考答案)

    第8章 进程管理 150 8.1 进程管理的应用 150 8.2 定时执行 155 小结 156 习题八 157 一、思考题 157 二、选择题 157 三、上机操作 157 第9章 C编译器—— gcc 158 9.1 什么是gcc 158 9.1.1 gcc简介 158 9.1.2 gcc...

    华为工程师linux的笔记-第8章.pdf

    Linux基础篇总共包含8个章节,第1章到第8章学习内容分别包括:Linux快速入门、Linux发展及系统安装、CentOS Linux系统管理、Linux必备命令、Linux用户和组、Linux软件包管理、磁盘管理、Linux文件共享管理等。...

    linux虚拟磁盘源代码

    linux虚拟磁盘源代码,通过内存虚拟磁盘。是初学linux驱动编程的参考代码 1. 使用insmod加载驱动程序。rmod卸载驱动程序。 dmesg |tail -20查看最后的...8. 在mnt中,可以看到第4步中给磁盘写入的文件。表明实验成功。

    华为工程师linux的笔记-第5章.pdf

    Linux基础篇总共包含8个章节,第1章到第8章学习内容分别包括:Linux快速入门、Linux发展及系统安装、CentOS Linux系统管理、Linux必备命令、Linux用户和组、Linux软件包管理、磁盘管理、Linux文件共享管理等。...

Global site tag (gtag.js) - Google Analytics