首页 > 代码库 > Linux磁盘与文件系统管理
Linux磁盘与文件系统管理
▲ETX2文件系统
通常一个扇区的大小为512字节(byte=8个二进制位)
分区的要点就是要记录每一个分区的起始与结束柱面
MBR(master boot recorder)最多提供4个分区的记忆
为提高磁头的读取效率,使用了逻辑块的概念 1Block=2^n扇区
每个文件系统开始位置的那个块称为超级块。超级快存储文件系统的大小,空的和满的块,以及其他信息
Ext2规划出inode与block来分别存储档案的属性(inode中存放)和档案的内容(Block area中存放)。在linux ext2文件系统建立一个目录时,ext2文件系统给该目录一个inode和至少一个block。建立一个文件时,ext2至少给文件分配一个inode和相对于该文件大小的块的数量。inode本身不记录文件名,仅记录文件的相关属性,文件名则记录在目录所属的块区域。
使用dumpe2fs查看inode等的信息
Block与inode在格式化的时候就确定了。一个分区能够容纳的文件数与inode有关。一个inode的大小为128字节。块为固定大小,一般为1024/2048/4096块的大小,在格式化的时候根据分区所要存储的文件类型决定块的大小。
▲inode记录的信息
该档案的拥有者与群组(owner/group)
该档案的存储模式(read/write/excute)
该档案的类型(type f,b,c,s,l,p,d)
该档案的时间(ctime,atime,mtime)
该档案的容量
定义档案特性的旗标(flag 例如SUID,SGID)
该档案真正内容的指向(pointer)
………….
▲引入日志式文件系统
当系统要写入一个档案的时候,会先在日志记录区块中记录:某个档案准备要写入磁盘了
开始写入档案的权限与数据
开始更新metadata的数据
完成数据与metadata的更新,在日志记录区块当中完成该档案的记录
Linux文件系统的运行:采用异步方式。读取一个文件时,将文件所在的块数据加载到内存中,如果文件数据被修改,在内存中的数据就被标记为"脏",而磁盘中的数据还没有被修改,需要写入磁盘,以保证一致性。
载入点:必须是一个目录(可以记录节点与文件名相关信息,而文件不能),而不能是一个文件
Linux支持的文件系统查看/proc/filesystems或/lib/modules/‘uname -r‘/kernel/fs
▲文件系统的简单操作
df [-ahikbmHT] [目录或文件名] 显示系统中当前磁盘的总容量,已使用容量和剩余容量的信息
参数-a 列出所有的文件系统,包括/proc等文件系统
参数-b 以Bytes为单位显示各文件系统
参数-k 以KBytes为单位显示各文件系统
参数-m 以MBytes为单位显示各文件系统
参数-h 以较易阅读的方式显示各文件系统
参数-i 不用硬盘容量,而以inode的数量来显示
参数-H 以M=1000K取代M=1024K的进位来显示
参数-T 将分区的文件系统名称显示出来
du [-ahskm] [档案或目录名称] 查看磁盘盒目录的大小
参数-a 列出所有的档案与目录容量
参数-h 以易读的容量格式(G/M)显示
参数-s 列出总量,而不列出每个目录占用的容量
参数-k 以KBytes列出容量显示
参数-m 以MBytes列出容量显示
ln [-sf] [来源文件] [目标文件]
参数-s 如果ln不加任何参数就进行连接,就是hard link,-s是symbolic link(软连接)
参数-f 如果目标文件存在,就主动将目标文件直接移除后再建立
Hard link(硬连接,实际连接) 不能跨filesystem,不能link目录
Symbolic link(符号链接,快捷方式) 与windows的快捷方式一样
▲磁盘的分割,格式化,检验与挂载
fdisk [-l] [装置名称] 把整个系统内能够搜寻到的装置的分区全部列出来
参数-l 输出后面接的设备所有的分区内容
d 删除一个磁盘分割
n 新增一个磁盘分割
p 将目前的磁盘分割列出来
q 不储存离开
w 写入磁盘分割表后离开
partprobe
mke2fs [-bicjL] [装置名称] make ext2 file system
参数-b 可以设定每个block的大小,支持1024,2048.4096bytes三种
参数-i 多少容量给予一个inode
参数-c 检查磁盘错误,快速读取测试
参数-c -c 测量读写,速度慢
参数-j 主动加入日志而成为EXT3
参数-L 后面接卷标名称(Label)
fsck [-AtCary] [装置名称]
参数-t fsck可以检查几种不同的filesystem。使用ls –l /sbin/fsck*去检查看看,就知道有几种filesystem
参数-A 依据/etc/fstab的内容,将所有的装置都扫描一次。通常开机过程会执行一次
参数-a 自动修复检查到的有问题的扇区,不用一直按y
参数-r 一定要让使用者决定是否需要修复
参数-y 与-a类似,但是某些filesystem仅支持-y这个参数
参数-C 可以在检验过程当中,使用一个长条图来显示目前的进度
参数-f 强制检查
系统出现极大的问题,导致在linux开机的时候得进入单人单机模式下进行维护的行为时,才使用fsck,被检查的partition务必不可挂载到系统上。
Badblocks [-svw] [装置名称]
参数-s 在屏幕上列出进度
参数-v 可以在屏幕上看到进度
参数-w 使用写入的方式来测试。待检查的装置已有档案时,不建议用此参数
sync 将系统暂存在内存当中的数据回存写入磁盘当中
mount [-tonL] [装置名称代号] [挂载点]
参数-a 依照/etc/fstab的内容将所有相关的磁盘都挂上来
参数-n 一般来说,当我们挂载文件系统到linux上时,linux会主动的将目前的分区与文件系统还有对应的挂载点都记录到/etc/mtab档案中。系统无法写入/etc/mtab时,就可以加上-n这个参数来略过写入mtab的动作
参数-L 系统除了利用装置名称代号之外,还可以利用分区的卷标进行挂载。所以最好为分区取一个系统当中独一无二的名称。
参数-t linux支持的档案格式。例如-t ext3来告知系统用ext3的档案格式来挂载该分区。由于各个文件系统并不相同,所以挂载前要知道该分区的文件系统,若mount后面没有加-t档案系统格式时,则linux在预设的情况下,会主动以/etc/filesystems这个档案内规范的档案系统格式来尝试主动的挂载。也可以利用mount将某个目录挂载到另外一个目录
e2label 装置名称 新的label名称
至于系统支持的filesystem类型在/lib/modules/‘uname –r‘/kernel/fs或/proc/filesystems当中。常见的有ext2,ext3,reiserfs等linux惯用文件系统。vfat,msdos等windows常见的filesystem。iso9660为光盘片的格式。nfs,smbfs等网络相关档案系统。
参数-o 后面可以接一些挂载时,额外加上的参数!比如账号、密码、读写权限等
ro,rw 此partition为只读ro或可读写rw
async,sync 此partition为同步写入(sync)或异步(async),预设是async
auto,noauto 允许此分区被以mount –a自动挂载(auto)
dev,nodev 是否允许此分区含有suid/sgid的文件格式
exec,noexec 是否允许此分区上拥有可执行binary档案
user,nouser 是否允许此分区让用户执行mount。一般来说,mount仅有root可以进行,但使用user参数,则可让一般用户也能够对此分区进行mount
defaults 默认值为:rw,suid,dev,exec,auto,nouser,and async
remount 重新挂载,在系统出错或重新更新参数时用
▲设置启动载入
挂载软盘
mount –t ext2 /dev/fd0 /mnt/floppy
mount –t vfat /dev/fd0 /mnt/floppy
挂载windows磁盘
mount –t vfat /dev/hda1 /mnt/windows
mount –t vfat –o iochartset=cp950 /dev/hda1 /mnt/windows
开机挂载 /etc/fstab及/etc/mtab
根目录/是必须要载入的,而且是第一个载入的
其他载入点必须是已建立的目录
所有载入点必须是已建立的目录
所有载入点在同一时间内,只能载入一次
所有分区在同一时间内,只能载入一次
若进行卸载,必须将工作目录移到载入点(及其子目录)之外
▲建立虚拟内存
fdisk 新建立一个分区 mkswap /devsda?
Swapon/dev/sda? Swapoff /dev/sda?
dd if=/dev/zero of=/tmp/swap bs=1M count=100或
dd </dev/zero>/tmp/swap bs=1M count=100
mkswap /tmp/swap
swapon /tmp/swap
swapoff /tmp/swap
注意使用free查看内存的情况
Linux磁盘与文件系统管理