第八章 Linux磁盘与文件系统管理
硬盘:柱面、磁道、扇区
柱面:分区时的最小单位
逻辑块:(block)文件系统读写的最小单位
块大小=2的n次方 * 扇区大小
块不能划分的太大,否则浪费磁盘空间
扇区:硬盘上最小的存储物理单位量
一般扇区大小为:512字节(bytes)
硬盘容量的基本计算公式:磁盘容量=柱面数 * 磁头数 * 扇区数 * 512btyes
Ext2 文件系统中,文件分为两部分来存储:1.文件属性(inode存储) 2.文件内容(块存储)
格式化ext2分区时,需要指定inode 和块大小
Inode记录的信息:
owner/group、read/write/execute、type、ctime/atime/mtime、size、flag、pointer还包括文件内容放置在哪个块
1. 目录:一个inode + 至少一个块
2. 文件:一个inode + 文件大小的块
Inode不记录文件名,而文件名则记录目录所属的块区域
以/etc/crontab读取为例:
注:1.ext2或者ext3在格式化时就已经建立inode与块的数目了(mke2fs)
2.一个分区所能容许的最大文件数与inode的数量有关(因一个文件至少要一个inode)
3.一般inode占用128字节或者256字节
4.一般来说,每4KB的磁盘空间分配一个inode
超级快记录的信息:
1.块与inode的总量
2. 未使用/已使用的inode/块总量
3. 一个块与一个inode的大小
4. 文件系统的载入时间、最近一次写入数据的时间、最近一次检验磁盘(fsck)的时间
5. 有效位数值,若此文件系统载入,则有效位为0,否则,有效位为1
组描述符(group description):记录此块由何处开始记录
块位图(block bitmap):记录此块是否被占用
Inode位图(inode bitmap):记录此inode是否被使用
Inode 表(inode table):为每个inode的数据存放区
数据块(data block):为每个块的数据存放区
一般将inode表与块区域成为数据存放区,其他如超级快、块位图与inode位图等成为元数据
E2fsck:数据一致性检查
Linux 通常采用异步处理方式
载入点:目录与文件系统能产生对应的入口点,即载入文件系统的入口,载入点一定是目录而不是文件
文件系统:1.传统 :ext2、minix、ms-dos、fat、iso9660
日志文件系统:ext3、reiserfs、ntfs、ibm的jfs、sgi的xfs
网络文件系统:nfs、smbfs
系统支持的文件系统:/lib/modules/`uname -r`/kernel/fs
目前启用的文件系统:Cat /proc/filesystems
VFS 虚拟文件系统交换 ,管理所有的文件系统
命令:df【分区容量】 主要参数:-a 列出所有的文件系统 包括/proc等特殊的文件系统 –h以GB/MB/KB显示 –H 以1M=1000Kb取代 1M=1024kb –T该分区文件系统名称 –i 不用磁盘容量,以inode的数量来显示
特殊文件系统不占用磁盘空间,而占用内存
命令:du【目录大小】主要参数:
-a 列出所有的文件及目录的容量
-s 列出总容量
du –sm 查看当前目录下的每个目录的容量 ,而du 显示默认单位为kb
命令:ln 【链接】
1.硬链接 2.符号链接
硬链接:只是在某个目录下新增一个该文件的关联数据而已,上层目录的关联数据都指向同一个inode处
硬链接设置链接文件时,磁盘空间与inode的数目一般都不会变
硬链接:1.不能跨域文件系统 2.不能链接目录
符号链接 = windows下的快捷方式 建立会占用inode与块,为一个新文件
ln –s 建立符号链接
ln 建立硬链接 参数:-f 若目标文件存在时,主动将目标文件直接删除后再建立
命令:mke2fs 【格式化分区】 主要参数:
-b 设置块大小
-i 给一个inode多少容量
-C检查磁盘错误 其中
-c 以只读方式检查
-c-c 以读写方式检查
-L 接卷标
-j 将ext2 加入日志而成为ext3
块大小默认:4096KB
格式化为其他文件系统:mkfs.<其他文件系统>
命令:fdisk 【分区】
分区以root在单用户模式下比较安全。主要参数:
-A按照/etc/fstab,将所有设备都扫描一遍,启用默认执行
-a 自动修复
-r 确认修复
-y同a参数
-C显示进度
-f 强制检查
fsck 【磁盘检查】命令:检查有无坏道
Linux 下的fsck = windows 下的scandisk 系统正常使用fsck系统可能出问题
注意:执行fsck检查的分区务必不可载入到系统,也就是在卸载状态。
-s 列出进度
-v 在屏幕上显示进度
-w 写入方式测试(最好不要用此参数)
Sync 将缓存数据同步写入硬盘
mount 【分区&设备&磁盘载入】命令:主要参数:
-a 将/etc/fstab的所有分区都挂载
-h将载入当前分区与文件系统还有对应的载入点都记录进/etc/mtab中
-L 跟系统分区卷标
-t 支持的文件系统格式
-o[ro/rw、async/sync是否同步,默认异步、auto/noauto是否自动载入、dev/nodev是否建立设备文件、suid/nosuid 是否允许suid、exec/noexec 是否可执行、user/nouser 是否允许一般用户载入、default 默认为:rw/suid/dev/exec/auto/nouser/async]
-remount 重新载入
umount【分区&磁盘&设备卸载】 卸载 –f强制卸载
命令:mknod 【设置磁盘号】主要参数:
-b设置设备名称为存储外部设备文件
-p 设备为一个FIFO文件
-c 设置设备名称为一个外部设备文件
命令:e2label 【更改卷标】
tune2fs 【分区格式转换】 主要参数:
-j 将ext2文件系统格式转换为ext3文件系统格式
-l将超级快的内容读出来 tune2fs –l = dumpe2fs –h
-L修改文件系统的卷标
DMA模式(direct memary access)是一种不经过cpu而直接从内存取得数据的交换模式
hdparm 【启动磁盘DMA模式】 主要参数:
-i 可以讲系统核心开机测试硬盘信息测试读出来
-d 设置是否启用DMA模式(-d1 启动 –d0取消)
-m 设置同步读取多个扇区的模式
-T测试暂存区cacha的访问性能
-t 测试硬盘的实际访问性能
dump 【系统备份命令】dump 为0 表示不备份 为1表示备份 为2表示备份但比重小于1
fsck 检验分区 0 表示不检验 1 表示要检验 2 表示检验
虚拟内存建立
1.设置一个swap分区
2.建立一个虚拟内存文件
设置swap分区:
1.fdisk建立分区
2.mkswap格式化建立的分区
3.启用swapon
4.添加到/etc/fstab中开机挂载
设置虚拟内存文件:
1.dd命令建立swap文件 例如:dd if=/dev/zero of=/swapfile bs=1M count=1000
2.格式化虚拟内存文件 mkswap
3.启用虚拟内存文件 swapon
4.添加/etc/fstab挂载虚拟内润文件以便开机挂载启动
课后习题&答案
……