首页 > 代码库 > 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磁盘与文件系统管理