Linux学习四 Linux 磁盘与文件系统管理

1 认识 Linux 文件系统

  Linux 最传统的磁盘文件系统 (filesystem) 使用的是 EXT2,而文件系统是建立在磁盘上的,因此我们得了解磁盘的物理组成。

1.1 磁盘组成与分区

  磁盘物理组成:

    圆形的磁盘盘(主要记录数据的部分);

    机械手臂,与在机械手臂上的磁盘读取头(可擦写磁盘盘上的数据);

    主轴马达,可以转动磁盘盘,让机械手臂的读取头在磁盘盘上读取数据。

  磁盘盘上物理组成:

    扇区(Sector)为最小的物理储存单位,且依据磁盘设计的不同,目前主要有 512bytes 与 4K 两种格式;

    将扇区组成一个圆,那就是磁柱(Cylinder);

    早期的分区主要以磁柱为最小分区单位,现在的分区通常使用扇区为最小分区单位(每个扇区都有其号码,就好像座位一样);

扫描二维码关注公众号,回复: 7904518 查看本文章

    磁盘分区表主要有两种格式,一种是限制较多的 MBR 分区表,一种是较新且限制较少的 GPT 分区表;

    MBR 分区表中,第一个扇区最重要,里面有:(1)主要开机区(Master boot record,MBR)及分区表(partition table),其中 MBR 占有 446bytes,而 partition table 则占有 64bytes;

    GPT 分区表除了分区数量扩充较多之外,支持的磁盘容量也可以超过 2TB。

  磁盘文件名格式:

    /dev/sd[a-p][1-128]:为实体磁盘的磁盘文件名;

    /dev/vd[a-d][1-128]:为虚拟磁盘的磁盘文件名。

1.2 文件系统特性

  Linux 的正统文件系统为 EXT2(Linux second extended file system,ext2fs)

  文件系统通常会将文件权限(rwx)与文件属性(拥有者、群组、时间参数等)这两部分的数据分别存放在不同的区块,权限与属性放置到 inode 中,至于实际数据则放置到 data block 区块中。超级区块 (superblock) 会记录整个文件系统的整体信息,包括 inode 与 block 的总量、使用量、剩余量等。

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

  inode     :记录文件的属性,一个文件占用一个 inode ,同时记录此文件的数据所在的 block 号码;

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

1.3 Linux 的 EXT2 文件系统(inode)

  文件系统一开始就将 inode 与 block 规划好了,除非重新格式化(或者利用 resize2fs 等指令变更文件系统大小),否则 inode 与 block 固定后就不再变动。

   文件系统最前面有一个启动扇区(boot sector),这个启动扇区可以安装开机管理程序。

1.3.1 data block(资料区块)

  data block 是用来放置文件内容数据的地方,在 EXT2 文件系统中所支持的 block 大小有 1K,2K 及4K 三种。

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

  block 基本限制:

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

    每个 block 内最多只能够放置一个文件的数据;

    承上,如果文件大于 block 的大小,则一个文件会占用多个 block 数量;

    承上,若文件小于 block ,则该 block 的剩余容量就不能够被使用了(磁盘空间会浪费)。

1.3.2 inode table(inode 表格)

  inode 记录的文件数据内容:

    该文件的存取模式(read/write/excute);

    该文件的拥有者与群组(owner/group);

    该文件的容量;

    该文件建立或状态改变时间(ctime);

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

    最近修改的时间(mtime);

    定义文件特性的旗标(flag),如 SetUID ...;

    该文件真正内容的指向(pointer)。

  inode 特色:

    每个 inode 大小均固定为 128 bytes(新的 ext4 与 xfs 可设定到 256 bytes);

    每个文件都仅会占用一个 inode 而已;

    承上,因此文件系统能够建立的文件数量与 inode 的数量有关;

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

1.3.3 Superblock(超级区块)

  Superblock 是记录整个 filesystem 相关信息的地方,记录的信息主要有:

    block 与 inode 的总量;

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

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

    filesystem 的挂载时间,最近一次写入数据的时间、最近一次检验磁盘(fsck)的时间等文件系统的相关信息;

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

1.3.4 Filesystem Description(文件系统描述说明)

  这个区段可以描述每个 block group 的开始与结束的 block 号码,以及说明每个区段(superblock,bitmap,inodemap,data block)分别介于哪一个 block 号码之间。

1.3.5 block bitmap(区块对照表)

  从 block bitmap 当中可以知道哪些 block 是空的。

1.3.6 inode bitmap(inode 对照表)

  记录使用与未使用的 inode 号码。

1.3.7 dumpe2fs:查询 Ext 家族 superblock 信息的指令

  dumpe2fs [-bh] 装置文件名

  选项与参数:

    -b:列出保留为坏轨的部分(一般用不到)

    -h:仅列出 superblock 的数据,不会列出其他的区毁内容

  blkid  列出目前系统有被格式化的装置

2 文件系统的简单操作

2.1 磁盘与目录的容量

  df [-ahikHTm] [目录或文件名]      列出文件系统的整体磁盘使用量

  选项与参数:

    -a:列出所有的文件系统,包括系统特有的 /proc 等文件系统;

    -k:以 KBytes 的容量显示各文件系统;

    -m:以 MBytes 的容量显示各文件系统;

    -h:以人们较易阅读的 GBytes,MBytes,KBytes 等格式自行显示;

    -H:以 M=1000K 取代 M=1024K 的进位方式;

    -T:连同该 partition 的 filesystem 名称(例如 xfs)也列出;

    -i  :不同磁盘容量,而以 inode 的数量来显示

  du [-ahskmS] 文件或目录名       评估文件系统的磁盘使用量

  选项与参数:

    -a:列出所有文件与目录容量,因为默认仅统计目录底下的文件量而已;

    -h:以人们较易读的容量格式(G/M)显示;

    -s列出总量,而不列出每个各别的目录占用容量;

    -S:不包括子目录下的总计;

    -k:以 KBytes 列出容量显示;

    -m:以 MBytes 列出容量显示。

2.2 实体链接与符号链接:ln

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

  选项与参数:

    -s:如果不加任何参数就进行连结,那就是 hard link,至于 -s 就是 symbolic link;

    -f :如果 目标文件 存在时,就主动将目标文件直接移除后再建立。

  Hard Link(实体链接,硬式连结或实际连结)只是在某个目录下新增一笔档名链接到某 inode 号码的关联记录而已。

  Symbolic Link(符号链接,亦即是快捷方式)就是在建立一个独立的文件,而这个文件会让数据的读取指向他 link 的那个文件的档名!

3 磁盘的分区、格式化、检验与挂载

  磁盘操作:

    1、对磁盘进行分区,以建立可用的 partition;

    2、对该 partition 进行格式化 (format),以建立系统可用的 filesystem;

    3、若想要仔细一点,则可对刚刚建立好的 filesystem 进行检验;

    4、在 Linux 系统上,需要建立挂载点(亦即是目录),并将他挂载上来。

3.1 观察磁盘分区状态

  lsblk [-dfimpt] [device]          列出系统上的所有磁盘列表

  选项与参数:

    -d:仅列出磁盘本身,并不会列出该磁盘的分区数据

    -f :同时列出该磁盘内的文件系统名称

    -i :使用 ASCII 的线段输出,不要使用复杂的编码

    -m:同时输出该装置在 /dev 底下的权限数据(rwx 的数据)

    -p:列出该装置的完整文件名!而不是仅列出最后的名字而已

    -t :列出该磁盘装置的详细数据,包括磁盘队列机制、预读写的数据量大小等

  blkid      列出装置的 UUID 等参数

  parted device_name print     列出磁盘的分区表类型与分区信息

3.2 磁盘分区:gdisk/fdisk

  MBR 分区表请使用 fdisk 分区,GPT 分区表情使用 gdisk 分区!

  gdisk 装置名称:只要离开 gdisk 时按下【q】,那么所有的动作【都不会生效】相反的,按下【w】就是动作生效的意思。

  gdisk 内部指令:

    p:查询当前磁盘状态

    ?:查询指令

    n:增加分区

    d:删除分区

   partprobe [-s]    更新 Linux 核心的分区表信息

   cat /proc/partitions  查看核心分区记录

3.3 磁盘格式化(建置文件系统)

  mkfs.xfs [-b bsize] [-d params] [-i params] [-l params] [-L label] [-f] [-r params] 装置名称

  选项与参数:

    关于单位:底下只要谈到【数值】,没有加单位则为 bytes 值,可以用 k,m,g,t,p(小写)来解释。比较特殊的是 s 这个单位,它指的是 sector 的个数。

    -b:后面借的是 block 容量,可由 512 到 64k,不过最大容量限制为 Linux 的 4k!

    -d:后面接的是 data section 的相关参数值,主要值有:

      agcount=数值:设定需要几个储存群组的意思(AG),通常与 CPU 有关

      agsize=数值   :每个 AG 设定为多少容量的意思,通常 agcount/agsize 只选一个设定即可

      file     :指的是【格式化的装置是个文件而不是个装置】!(例如虚拟磁盘)

      size=数值  :data section 的容量,亦即你可以不将全部的装置容量用完

      su=数值    :当有 RAID 时,那个 stripe 数值的意思,与底下的 sw 搭配使用

      sw=数值    :当有 RAID 时,用于储存数据的磁盘数量(须扣除备份碟与备用碟)

      sunit=数值   :与 su 相当,不过单位使用的是【几个 sector(512bytes 大小)】

      swidth=数值   :就是 su*sw 的数值,但是以【几个 sector(512bytes 大小)】来设定

    -f :如果装置内已经有文件系统,则需要使用这个 -f 来强制格式化

    -i :与 inode 有较相关的设定,主要的设定值有:

      size=数值  :最小是 256bytes 最大是 2k,一般保留 256 就足够使用了

      internal=[0|1] :log 装置是否为内建,预设为 1 内建,如果要用外部装置,使用底下设定

      logdev=device:log 装置为后面接的那个装置上头的意思,需设定 internal=0 才可

      size=数值  :指定这块登录区的容量,通常最小得有 512 个 block,大约 2M 以上才行!

    -L:后面接这个文件系统的标头名称 Label name 的意思!

    -r :指定 realtime section 的相关设定值,常见的有:

      extsize=数值   :就是那个重要的 extent 数值,一般不须设定,但有 RAID 时,最好设定与 swidth 的数值相同较佳!最小为 4K 最大为 1G。

  mkfs.ext4 [-b size] [-L label] 装置名称      EXT4 文件系统格式化

  选项与参数:

    -b:设定 block 的大小,有 1K,2K,4K 的容量

    -L:后面接这个装置的标头名称

3.4 文件系统检验

  xfs_repair [-fnd] 装置名称    xfs 文件系统错乱使用这个指令

  选项与参数:

    -f :后面的装置其实是个文件而不是实体装置

    -n:单纯检查并不修改文件系统的任何数据(检查而已)

    -d:通常用在单人维护模式底下,针对跟目录(/)进行检查与修复的动作!不要随便使用

  fsck.ext4 [-pf] [-b superblock] 装置名称    处理 EXT4 文件系统

  选项与参数:

    -p:当文件系统在修复时,若有需要回复 y 的动作时,自动回复 y 来继续进行修复动作。

    -f :强制检查!一般来说,如果 fsck 没有发现任何 unclean 的旗标,不会主动进入细部检查,如果你想要强制 fsck 进入细部检查,就得加上 -f 旗标!

    -D:针对文件系统下的目录进行优化配置

    -b:后面接 superblock 的位置!一般来说这个选项用不到。但是如果你的 superblcok 因故损毁时,透过这个参数即可利用文件系统内备份的 superblcok 来尝试救援。一般来说, superblock 备份在:1K block 放在 8193,2K block 放在 16384,4K block 放在 32768。

3.5 文件系统挂载与卸除

  挂载前注意事项:

    1)单一文件系统不应该被重复挂载在不同的挂载点(目录)中;

    2)单一目录不应该重复挂载多个文件系统;

    3)要作为挂载点的目录,理论上应该都是空目录才是。

  mount -a

  mount [-l]

  mount [-t 文件系统] LABEL=' '  挂载点

  mount [-t 文件系统] UUID=' '  挂载点

  mount [-t 文件系统] 装置文件名  挂载点

  选项与参数:

    -a:依照配置文件 /etc/fstab 的数据将所有未挂载的磁盘都挂载上来

    -l :单纯的输入 mount 会显示目前挂载的信息。加上 -l 可增列 Label 名称!

    -t :可以加上文件系统种类类指定欲挂载的类型。常见的 Linux 支持类型有:xfs,ext3,ext4,reiserfs,vfat,iso9660(光盘格式),nfs,cifs,smbfs(后三种为网络文件系统类型)

    -n:在默认的情况下,系统会将实际挂载的情况实时写入 /etc/mtab 中,以利其他程序的运作。但在某些情况下(例如单人维护模式)为了避免问题会刻意不写入。此时就要使用 -n 选项。

    -o:后面可以接一些挂载时额外加上的参数!比方说账号、密码、读写权限等

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

  选项与参数:

    -f:强制卸除!可用在类似网络文件系统(NFS)无法读取的情况下;

    -l :立刻卸除文件系统,比 -f 还强!

    -n:不更新 /etc/mtab 情况下卸除。

3.6 磁盘/文件系统参数修订

  mknod 装置文件名 [bcp] [Major] [Minor]    通过文件的 major 与 minor 数值来修订

  选项与参数:

    装置种类:

      b:设定装置名称成为一个周边储存设备文件,例如磁盘等;

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

      p:设定装置名称成为一个 FIFO 文件;

    Major:主要装置代码

    Minor:次要装置代码

    磁盘文件名         Major         Minor    
/dev/sda 8 0-15
/dev/sdb 8 16-31
/dev/loop0 7 0
/dev/loop1 7 1

  

  

  

猜你喜欢

转载自www.cnblogs.com/zhouweijie/p/11754297.html