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, USB, Flash随身碟等接口的磁盘文件名;
 /dev/hd[a-d][1-63]:为 IDE 接口的磁盘文件名;

2. 文件系统基础知识

传统的磁盘与文件系统的应用中,一个分割槽就是只能够被格式化成为一个文件系统,所以我们可以说一个 filesystem 就是一个 partition。有些新技术可以将一个分割槽格式化为多个文件系统(例如LVM),也能够将多个分割槽合成一个文件系统(LVM, RAID)! 所以说,目前我们在格式化时已经不再说成针对 partition 来格式化了, 通常我们可以称呼一个可被挂载的数据为一个文件系统而不是一个分割槽。

档案数据除了档案实际内容外, 通常还有非常多的属性,文件系统通常会将这两部份的数据分别存放在不同的区块,权限与属性放置到 inode 中,至于实际数据则放置到 data block 区块中。 另外,还有一个超级区块 (superblock) 会记录整个文件系统的整体信息,包括 inode 不 block 的总量、使用量、剩余量等。

inode/block 资料存取示意图

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

inode 结构示意图
每个区段与 superblock 的信息都可以使用 dumpe2fs 这个指令来查询:
dumpe2fs [-bh] 装置文件名
-b :列出保留为坏轨的部分(一般用不到)
-h :仅列出 superblock 的数据,不会列出其他的区段内容

3. 目录树

Linux 下的 ext2 文件系统建立一个目录时, ext2 会分配一个 inode 与至少一块 block 给该目录。其中,inode 记录该目录的相关权限与属性,并可记录分配到的那块 block 号码; 而 block 则是记录在这个目录下的文件名与该文件名占用的 inode 号码数据。ls -i可以看到目录中文件的inode号码。

在 Linux 下的 ext2 建立一个一般档案时, ext2 会分配一个 inode 与相对于该档案大小的 block 数量给该档案。inode 本身并不记彔文件名,文件名的记录是在目录的 block 当中。因此当我们要读取某个档案时,就务必会经过目录的 inode 与 block ,然后才能够找到那个待读取档案的 inode 号码, 最终才会读到正确的档案的 block 内的数据。

目录树是由根目录开始读起,因此系统透过挂载的信息可以找到挂载点的 inode 号码(通常一个 filesystem 的最顶层 inode 号码会由 2 号开始),此时就能够得到根目录的 inode 内容,并依据该 inode 读取根目录的 block 内的文件名数据,再一层一层的往下读到正确的档名。

ext3日志式文件系统 (Journaling filesystem):为了避免文件系统不一致的情况发生
1. 预备:当系统要写入一个档案时,会先在日志记录区块中记录某个档案准备要写入的信息;
2. 实际写入:开始写入档案的权限与数据;开始更新 metadata 的数据;
3. 结束:完成数据与 metadata的更新后,在日志记录区块当中完成该档案的记录。

4. 挂载点

每个 filesystem 都有独立的 inode / block / superblock 等信息,这个文件系统要能够链接到目录树才能被我们使用。 将文件系统与目录树结合的动作我们称为『挂载』。重点是:挂载点一定是目录,该目录为进入该文件系统的入口。 因此并不是你有任何文件系统都能使用,必项要『挂载』到目录树的某个目录后,才能够使用该文件系统。


VFS 文件系统的示意图

5. 磁盘与目录的容量

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

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

6. 实体链接与符号链接

hard link 只是在某个目录下新增一笔档名链接到某 inode 号码的关连记录,两个档名对应同一个inode号码,如果你将任何一个『档名』删除,其实 inode 不 block 都还是存在的! 此时你可以透过另一个『档名』来读取到正确的档案数据。使用 hard link 设定链接文件时,磁盘的空间与 inode 的数目都不会改变。hard link不能跨文件系统,不能连接目录。

Symbolic Link就是在建立一个独立的档案,而这个档案会让数据的读取指向他 link 的那个档案的档名!由于只是利用档案来做为指向的动作, 所以,当来源档被删除之后,symbolic link 档案会打不开。由 Symbolic link 所建立的档案为一个独立的新档案,所以会占用掉 inode 与 block。

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

7. 磁盘的分割、格式化、检验与挂载

a. 磁盘分区: fdisk

fdisk [-l] 装置名称
-l :输出后面接的装置所有的 partition 内容。若仅有 fdisk -l 时, 则系统将会把整个系统内能够搜寻到的装置的 partition 均列出来。

在实作过程中请特别注意,因为 SATA 硬盘最多能够支持到 15 号的分割槽, IDE 则可以支持到 63 号。

b. 磁盘格式化:make filesystem, mkfs

mkfs [-t 文件系统格式] 装置文件名
-t :可以接文件系统格式,例如 ext3, ext2, vfat 等(系统有支持才会生效)

mke2fs [-b block大小] [-i block大小] [-L 标头] [-cj] 装置
-b :可以设定每个 block 的大小,目前支持 1024, 2048, 4096 bytes 三种;
-i :多少容量给予一个 inode 呢
-c :检查磁盘错误,仅下达一次 -c 时,会进行快速读取测试; 如果下达两次 -c -c 的话,会测试读写(read-write),会很慢
-L :后面可以接标头名称 (Label),这个 label 是有用的
-j :本来 mke2fs 是 EXT2 ,加上 -j 后,会主动加入 journal 而成为 EXT3。

c. 磁盘检验: fsck, badblocks

fsck [-t 文件系统] [-ACay] 装置名称
-t :指定文件系统, 不过由于现今的 Linux 会自动的透过 superblock 去分辨文件系统, 因此通常可以不需要这个选顷
-A :依据 /etc/fstab 的内容,将需要的装置扫描一次。
-a :自动修复检查到的有问题的扇区,所以你不用一直按 y
-y :与 -a 类似,但是某些 filesystem 仅支持 -y 这个参数!
-C :可以在检验的过程当中,使用一个直方图来显示目前的进度

badblocks -[svw] 装置名称
-s :在屏幕上列出进度
-v :可以在屏幕上看到进度
-w :使用写入的方式来测试,建议不要使用此参数,尤其是待检查的装置已有档案时

d. 磁盘挂载与卸除

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

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

mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n] 装置文件名 挂载点
-t :与mkfs 的选项非常类似的,可以加上文件系统种类来指定欲挂载的类型。
-n :在默认的情况下,系统会将实际挂载的情况实时写入 /etc/mtab 中,以利其他程序的运作。但在某些情况下(例如单人维护模式)为了避免问题,会刻意不写入
-L :系统除了利用装置文件名 (例如 /dev/hdc6)之外,还可以利用文件系统的标头名称 (Label)来进行挂载。
-o :后面可以接一些挂载时额外加上的参数!
ro, rw: 挂载文件系统成为只读(ro) 或可擦写(rw)
async, sync: 此文件系统是否使用同步写入 (sync) 或异步 (async) 的 内存机制。
auto, noauto: 允许此 partition 被以 mount -a 自劢挂载(auto)
dev, nodev: 是否允许此 partition 上,可建立装置档案?
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, and async
remount: 重新挂载,这在系统出错,或重新更新参数时,很有用!

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

e. 磁盘参数修订

修改label
e2label 装置名称 新的Label名称

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

f. 设定开机挂载

直接到 /etc/fstab 里面去修修就行啰
 根目录 / 是必项挂载的﹐而且一定要先于其它 mount point 被挂载进来。
 其它 mount point 必项为已建立的目录﹐可任意指定﹐但一定要遵守必须的系统目录架构原则
 所有 mount point 在同一时间内﹐只能挂载一次。
 所有 partition 在同一时间内﹐只能挂载一次。
 如若进行卸除﹐您必项先将工作目录移到 mount point(及其子目彔) 之外。

g. 特殊装置 loop 挂载 (映象档不刻录就挂载使用)

mount -o loop 映像文件名

h. 内存置换空间(swap)之建置

1. 分割:先使用 fdisk 在你的磁盘中分割中一个分割槽给系统作为 swap 。由于 Linux 的 fdisk 预设会将分割槽的 ID 设定为 Linux 的文件系统,所以你可能还得要设定一下 system ID 就是了。
2. 格式化:利用建立 swap 格式的『mkswap 装置文件名』就能够格式化该分割槽成为 swap 格式啰
3. 使用:最后将该 swap 装置启动,方法为:『swapon 装置文件名』。
4. 观察:最终透过 free 这个指令来观察一下内存的用量吧!

磁盘与文件系统管理--鸟哥私房菜读书笔记相关推荐

  1. Linux 磁盘与文件系统管理(鸟哥私房菜)

    本文来自:http://vbird.dic.ksu.edu.tw/linux_basic/0230filesystem.php   第八章.Linux 磁盘与文件系统管理 系统管理员很重要的任务之一就 ...

  2. LINUX鸟哥私房菜学习笔记之开机流程与主引导分区(MBR)

    ### BIOS与CMOS BIOS 是一个写入到主板上的一个韧体(韧体就是写入到硬件上的一个软件程序),BIOS是在计算机开机的时候系统主动执行的第一个程序 CMOS 是记录各项硬件参数且嵌入在主板 ...

  3. 鸟哥私房菜 第二部分学安文件目录与磁盘格式笔记

    鸟哥私房菜 第二部分学安文件目录与磁盘格式笔记 文章目录 鸟哥私房菜 第二部分学安文件目录与磁盘格式笔记 linux的文件权限与目录配置 用户与用户组 linux文件权限概念 linux目录配置 li ...

  4. 鸟哥私房菜(基础篇第三版)笔记

    鸟哥私房菜(基础篇第三版)笔记 Linux最传统的磁盘文件系统(filesystem)使用的是EXT2,centos5支持EXT3,6已经支持EXT4了. 文件系统包括以下三部分: 1:superbl ...

  5. 鸟哥私房菜-基础篇小笔记

    最近看了一下鸟哥私房菜基础篇第四版,收获多多,下边是自己的一些简单笔记,方便后期使用时快速回忆,其中图片大多来自鸟哥私房菜文档截图,如有权限版权问题,立马删除! cat 查看文件 tac 倒序查看文件 ...

  6. 鸟哥私房菜与linux就该怎么学这两本书的区别

    尾部介绍二者区别 centos7切换桌面或命令行模式 安装gnome后自动进入桌面模式 如果需要打开命令行,可以直接打开终端或者直接按 ctrl+alt+F1切换至命令行,然后按ctrl+alt+F2 ...

  7. 鸟哥私房菜 (基础篇)---重点回顾---汇总

    鸟哥私房菜 (基础篇)-重点回顾-汇总 链接: https://pan.baidu.com/s/1LRGvYqUc5Z1tPjdzGUo_bg 提取码: rxkp 祝大家学的越来越好,加油!

  8. 时过2年再读鸟哥私房菜,写一份读书笔记之第一章到第八章

    上一份工作结束了,时间也过去了2年半,刚入行我是什么都不懂的一个小白,今天来看我可能还是一个什么都不懂的小白,报着初心者的态度决定再读一遍鸟哥的私房菜,看看是否2年半过去了,自己有什么长进. 第0章计 ...

  9. 鸟哥私房菜*基础篇(1)

    linux的内核版本 主.次版本为奇数:开发中版本(如2.5.xx) 主.次版本为偶数:稳定的版本(如2.6.xx) 什么是linux Linux kernel(内核) Linux distribut ...

最新文章

  1. 海康威视 | AI算法实习生招聘(3D检测/分割/多模态融合)
  2. 北航成AAAI 2021最大赢家,两篇一作斩获最佳论文、提名奖,研究皆与Transformer相关...
  3. c语言程序会使cpu变高,用 C 语言写个程序,运行时,cpu占用率一直保持50%
  4. python处理excel的方法有哪些_python简单处理excel方法
  5. 线性结构常规操作(四)
  6. vue 导入excel插件_Vue框架下实现导入导出Excel、导出PDF
  7. NUC1422 字母旋转游戏【水题】
  8. Swift3 中文手册.CHM版
  9. Ubuntu16.10上安装NodeJS6.9.2
  10. Python【每日一问】27
  11. 【AD15绘制原理图编译的一些警告的处理】
  12. 有道网页翻译chrome插件---我用过的最好的翻译插件
  13. tdk磁材手册_TDK磁性材料市场.ppt
  14. 盒子模型补充知识汇总
  15. 安卓逆向和手游辅助学习路线
  16. 一、第十五届全国大学生智能汽车竞赛AI电磁——项目介绍
  17. 【MySQL】测试题01
  18. 一份新媒体营销推广策划方案 助你升级主管路
  19. 无序数组中获取第k个最大数
  20. asp.net core ABP模板本地化设置

热门文章

  1. 木兰词·拟古决绝词柬友(引用)
  2. css_属性选择器(根据属性名或属性值设定指定样式)
  3. python3 cookie_Python3标准库:http.cookies HTTP cookie
  4. voip 音频采集时间_树莓派3 音频配置及其应用场景(录音、VoIP 电话等)(锁定重发)...
  5. Spring总结四:JDBC操作
  6. 头部公司的Robotaxi何时能拿掉安全员?
  7. 实测:一周不更新文章头条号指数会掉多少?
  8. 用AI说再见!“辣眼睛”的买家秀 1
  9. shell子串截取的三种用法:
  10. Runnable小练习(网图下载)