Linux基础篇-第七章-Linux 磁盘与文件系统管理

常用指令

df [-ahikHTm] [目录或文件名] :列出文件系统的整体磁盘使用量
      -a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
      -k :以 KBytes 的容量显示各文件系统;
      -m :以 MBytes 的容量显示各文件系统;
      -h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
      -H :以 M=1000K 取代 M=1024K 的进位方式;
      -T :连同该 partition 的 filesystem 名称 (例如 xfs) 也列出;
      -i :不用磁盘容量,而以 inode 的数量来显示

du [-ahskm] 文件或目录名称:评估文件系统的磁盘使用量(常用在推估目录所占容量)
      -a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。
      -h :以人们较易读的容量格式 (G/M) 显示;
      -s :列出总量而已,而不列出每个各别的目录占用容量;
      -S :不包括子目录下的总计,与 -s 有点差别。
      -k :以 KBytes 列出容量显示;
      -m :以 MBytes 列出容量显示;

ln [-sf] 来源文件 目标文件 :实体链接与符号链接
      -s :如果不加任何参数就进行连结,那就是 hard link,至于 -s 就是 symbolic link
      -f :如果 目标文件 存在时,就主动的将目标文件直接移除后再建立!

lsblk [-dfimpt] [device] :列出系统上的所有磁盘列表
      -d :仅列出磁盘本身,并不会列出该磁盘的分区数据
      -f :同时列出该磁盘内的文件系统名称
      -i :使用 ASCII 的线段输出,不要使用复杂的编码 (再某些环境下很有用)
      -m :同时输出该装置在 /dev 底下的权限数据 (rwx 的数据)
      -p :列出该装置的完整文件名!而不是仅列出最后的名字而已。
      -t :列出该磁盘装置的详细数据,包括磁盘队列机制、预读写的数据量大小等

blkid :列出装置的 UUID 等参数

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

gdisk 装置名称/fdisk 装置名称:磁盘分区

partprobe [-s] :更新 Linux 核心的分区表信息,你可以不要加 -s !那么屏幕不会出现讯息!

mkfs.xfs [-b bsize] [-d parms] [-i parms] [-l parms] [-L label] [-f] [-r parms] 装置名称 :XFS 文件系统
      关于单位:底下只要谈到『数值』时,没有加单位则为 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 其实是个综合指令而已,当我们使用 mkfs -t xfs 时,它就会跑去找 mkfs.xfs 相关的参数给我们使用! 如果想要知道系统还支持哪种文件系统的格式化功能,直接按 [tabl] 就很清楚了

mount [-t 文件系统] UUID=''/装置文件名/  挂载点:文件系统挂载
      -a :依照配置文件 /etc/fstab 的数据将所有未挂载的磁盘都挂载上来
      -l :单纯的输入 mount 会显示目前挂载的信息。加上 -l 可增列 Label 名称!
      -t :可以加上文件系统种类来指定欲挂载的类型。常见的 Linux 支持类型有:xfs, ext3, ext4,reiserfs, vfat, iso9660(光盘格式), nfs, cifs, smbfs (后三种为网络文件系统类型)
      -n :在默认的情况下,系统会将实际挂载的情况实时写入 /etc/mtab 中,以利其他程序的运作。但在某些情况下(例如单人维护模式)为了避免问题会刻意不写入。此时就得要使用 -n 选项。
      -o :后面可以接一些挂载时额外加上的参数!比方说账号、密码、读写权限等:
             async, sync: 此文件系统是否使用同步写入 (sync) 或异步 (async) 的内存机制,请参考文件系统运作方式。预设为 async。
             atime,noatime: 是否修订文件的读取时间(atime)。为了效能,某些时刻可使用 noatime
             ro, rw: 挂载文件系统成为只读(ro) 或可擦写(rw)
             auto, noauto: 允许此 filesystem 被以 mount -a 自动挂载(auto)
             dev, nodev: 是否允许此 filesystem 上,可建立装置文件? dev 为可允许
             suid, nosuid: 是否允许此 filesystem 含有 suid/sgid 的文件格式?
             exec, noexec: 是否允许此 filesystem 上拥有可执行 binary 文件?
             user, nouser: 是否允许此 filesystem 让任何使用者执行 mount ?一般来说,
             mount 仅有 root 可以进行,但下达 user 参数,则可让一般 user 也能够对此 partition 进行 mount 。
             defaults: 默认值为:rw, suid, dev, exec, auto, nouser, and async
             remount: 重新挂载,这在系统出错,或重新更新参数时,很有用!

umount [-fn] :装置文件名或挂载点 (将装置文件卸除)
      -f :强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情况下;
      -l :立刻卸除文件系统,比 -f 还强!
      -n :不更新 /etc/mtab 情况下卸除。

实体链接与符号链接: ln

在 Linux 底下的连结档有两种,一种是类似 Windows 的快捷方式功能的文件,可以让你快速的链接到目标文件(或目录);另一种则是透过文件系统的 inode 连结来产生新档名,而不是产生新文件!这种称为实体链接 (hard link)。

Hard Link (实体链接, 硬式连结或实际连结)

每个文件都会占用一个 inode ,文件内容由 inode 的记录来指向;想要读取该文件,必须要经过目录记录的文件名来指向到正确的 inode 号码才能读取。


image.png

上图的意思是,你可以透过 1 或 2 的目录之 inode 指定的 block 找到两个不同的档名,而不管使用哪个档名均可以指到 real 那个 inode 去读取到最终数据!那这样有什么好处呢?最大的好处就是『安全』!如同上图中, 如果你将任何一个『档名』删除,其实 inode 与 block 都还是存在的! 此时你可以透过另一个『档名』来读取到正确的文件数据喔!此外,不论你使用哪个『档名』来编辑,最终的结果都会写入到相同的 inode 与 block 中,因此均能进行数据的修改!

一般来说,使用 hard link 设定链接文件时,磁盘的空间与 inode 的数目都不会改变! 我们还是由上图来看,由图中可以知道, hard link 只是在某个目录下的 block 多写入一个关连数据而已,既不会增加 inode 也不会耗用 block 数量

hard link 应该仅能在单一文件系统中进行的,应该是不能够跨文件系统才对! 因为上图就是在同一个 filesystem 上!所以 hard link 是有限制的:
1、不能跨 Filesystem;
2、不能 link 目录。

Symbolic Link (符号链接,亦即是快捷方式)

Symbolic link 就是在建立一个独立的文件,而这个文件会让数据的读取指向他 link 的那个文件的档名!由于只是利用文件来做为指向的动作, 所以,当来源档被删除之后,symbolic link 的文件会『开不了』,会一直说『无法开启某文件!』。实际上就是找不到原始『档名』而已。

image.png

由 1 号 inode 读取到连结档的内容仅有档名,根据档名链接到正确的目录去取得目标文件的 inode ,
最终就能够读取到正确的数据了。你可以发现的是,如果目标文件(/etc/crontab)被删除了,那么整个环节就会无法继续进行下去, 所以就会发生无法透过连结档读取的问题了!

这里还是得特别留意,这个 Symbolic Link 与 Windows 的快捷方式可以给他划上等号,由 Symbolic link 所建立的文件为一个独立的新的文件,所以会占用掉 inode 与 block !

磁盘分区: gdisk/fdisk

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


image.png

你应该要透过 lsblk 或 blkid 先找到磁盘,再用 parted /dev/xxx print 来找出内部的分区表类型,之后才用 gdisk 或 fdisk 来操作系统。


image.png

下半部的分区表信息主要在列出每个分区槽的个别信息项目。每个项目的意义为:
1、Number:分区槽编号,1 号指的是 /dev/vda1 这样计算。
2、tart (sector):每一个分区槽的开始扇区号码位置
3、End (sector):每一个分区的结束扇区号码位置,与 start 之间可以算出分区槽的总容量
4、Size:就是分区槽的容量了
5、Code:在分区槽内的可能的文件系统类型。Linux 为 8300,swap 为 8200。不过这个项目只是一个提示而已,不见得真的代表此分区槽内的文件系统喔!
6、Name:文件系统的名称等等。

这个 gdisk 只有 root 才能执行,此外,请注意,使用的『装置文件名』请不要加上数字,因为 partition是针对『整个磁盘装置』而不是某个 partition 呢!所以执行『 gdisk /dev/vda1 』 就会发生错误!要使用 gdisk /dev/vda 才对!

用 gdisk 新增分区槽

image.png

重点在『 Last sector 』那一行,那行绝对不要使用默认值!因为默认值会将所有的容量用光!因此它默认选择最大的扇区号码! 因为我们仅要 1GB 而已,所以你得要加上 +1G 这样即可!不需要计算 sector 的数量,gdisk 会根据你填写的数值, 直接计算出最接近该容量的扇区数!每次新增完毕后,请立即『 p 』查看一下结果!

一般来说, Linux 大概都是 8200/8300/8e00 等三种格式, Windows 几乎都用0700 这样,如果忘记这些数字,可以在 gdisk 内按下:『 L 』来显示!


image.png

因为 Linux 此时还在使用这颗磁盘,为了担心系统出问题,所以分区表并没有被更新喔!这个时候我们有两个方式可以来处理! 其中一个是重新启动,不过很讨厌!另外一个则是透过 partprobe 这个指令来处理即可!

用 fdisk 新增分区槽

因为 fdisk 跟 gdisk 使用的方式几乎一样!只是一个使用 ? 作为指令提示数据,一个使用 m 作为提示这样而已。 此外,fdisk 有时会使用磁柱 (cylinder) 作为分区的最小单位,与 gdisk 默认使用sector 不太一样!大致上只是这点差别!另外,MBR 分区是有限制的 。


image.png

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

分区完毕后自然就是要进行文件系统的格式化啰!格式化的指令非常的简单,那就是『make filesystem,mkfs』 这个指令啦!这个指令其实是个综合的指令,他会去呼叫正确的文件系统格式化工具软件!

XFS 文件系统 mkfs.xfs

我们常听到的『格式化』其实应该称为『建置文件系统 (make filesystem)』才对啦!所以使用的指令是 mkfs !那我们要建立的其实是 xfs 文件系统, 因此使用的是 mkfs.xfs 这个指令才对。这个指令是这样使用的:

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

文件系统挂载与卸除

过去我们都习惯使用装置文件名然后直接用该档名挂载, 不过近期以来比较建议使用UUID 来识别文件系统,会比装置名称与标头名称还要更可靠!因为是独一无二的啊!

读到 7.4 设置开机挂载

你可能感兴趣的:(Linux基础篇-第七章-Linux 磁盘与文件系统管理)