Linux磁盘和文件系统管理

一.Linux磁盘管理:

1.磁盘的物理组成部分(这里介绍的主要是机械硬盘)

a.磁盘的组成主要有:

盘片,机械手臂和磁头,主轴马达

b.磁盘的数据存储和读取在于磁盘的盘片,在盘片上的一些概念:

扇区(sector):就是将盘片划分成若干个扇区。扇区是最小的存储单位,每个扇区512个字节。

柱面(Cylinder):磁盘是有多个盘片组合而成,而柱面是有不在同一磁盘上的相同位置上的扇区组成。柱面是分区的最小单位,也就是分区是根据柱面分区的。

c.第一个扇区的组成:

446个字节的MBR64字节的分区表和2字节Mgical Number 组成。

其中446字节的MBR主引导分区,引导开机程序。

64字节的分区表中16个字节标志一个分区,所以分区的时候最多有4个主分区,

2字节Mgical Number:编辑MBR是否有效

2.磁盘接口类型:

磁盘接口类型从整体角度上讲:硬盘接口分为IDESATASCSI、光纤通道和SAS五种。SCSI接口得到硬盘主要应用于服务器市场,而光纤通道只在高端服务器上。

并口的磁盘接口:

IDE:速率:133M/s

SCSI:640M/s 主要用户小型计算机系统接口(Small Computer System Interface

串口的磁盘接口:

SATA:6Gbps 串口硬盘(serial ATA

SAS:6Gbps (serial attached SCSI) 串行连接SCSI

USB:480MB/s

3.磁盘设备的设备文件的命名与设备文件

/dev/hd:IDE

/dev/sd[a-z] :SCSI,SATA,SAS,USB

设备文件:

块设备:block,存取单位为块,比如磁盘

字符设备:char,存取单位为字符,比如键盘

设备文件:关联至一个设备驱动,进而能够与之对应的硬件设备通信。

设备号:

主设备号:标志一个设备。

此设备号:标志在同一个设备类型下的不同设备。

二.Linux文件系统管理:

个人理解:一个可以被挂载的数据为一个文件系统。

Linux中的文件系统有:ext2ext3ext4xfsbtrfsreiserfsjfsramfsswap,光盘中iso9660

Windows中的文件系统有:fat32fatntfs

Unix支持的文件系统:FFSUFSJFS2

网络文件系统:NFSCIFS

集群文件系统:GFS2,OCFS2

分布式文件系统:ceph,moosefs,mogilefs,Glusterfs,Lustre

Linux中的文件系统:

xfs,(由SGI开发的先进的日志文件系统,支持超大容量文件)

btrfs,目标是取代Linux目前的ext3文件系统,改善ext3的限制,特别是单一文件大小的限制,总文件系统大小限制以及加入文件校验和特性。加入目前ext3/4未支持的一些功能,例如可写的磁盘快照(snapshots),以及支持递归的快照(snapshots of snapshots),内建磁盘阵列(RAID)支持,支持子卷(Subvolumes)的概念,允许在线调整文件系统大小。

reiserfs, 基于平衡树结构的文件系统

jfs,IBMAIX使用的日志文件系统

ramfs:内存文件系统,速度很快

 

Linux的虚拟文件系统:VFS

    在linux中有众多的文件系统,但是linux kernel是如何识别和管理这些文件系统的呢?其实linux系统中是通过虚拟文件系统(vritual Filesystem SwitchVFS)的功能读取文件系统的。也可以这样理解linux虚拟文件系统是众多文件系统与内核联系的接口


1.磁盘的分区:

linux上对一个磁盘的分区要用到fdiskpartxsfdisk命令。磁盘分区是以磁盘柱面为单位进行分区的。分区步骤如下:

1.fdisk DEVICE_NAME (要进行分区的磁盘)

2.执行这个命令后,将会进入交互式,根据提示进行相应的分区:

Command (m for help):

常用的选项有:

 n   add a new partition:创建新分区

 p   print the partition table:打印已有分区

 d   delete a partition:删除已有分区

 m   print this menu:获取帮助

 l   list known partition types:列表所分区id

 t   change a partition's system id:调整分区id

 w   write table to disk and exit:写入并退出

 q: quit, 放弃更新并退出

3.产看内核是否已经识别新的分区:cat /proc/partations

4.通知内核重新读取硬盘分区表:

partx -a /dev/DEVICE

kpartx -a /dev/DEVICE

CentOS 5中使用partprobe来让内核读取硬盘分区表

partprobe [/dev/DEVICE]

2.创建文件系统(格式化):

创建分区之后,就要对相应的分区创建文件系统了,也就是格式化分区。

创建文件系统的命令有:mkfsmke2fsmkswap

1.mkfs命令:

(1).# mkfs.FS_TYPE  /dev/DEVICE

FS_TYPE :ext3ext4xfsbtrfsvfat

(2) # mkfs -t FS_TYPE /dev/DEVICE

选项:-L LABEL :设定卷标

2.mke2fs命令:ext系列文件系统专用工具:

常用选线:

-t {ext2|ext3|ext4}:指定文件系统

-b {1024|2048|4096}:指定块大小

-L ‘LABEL’:指定卷标

-j:格式化成ext3 文件系统

-i #:指定数据空间中每多少个字节创建一个iNode;此大小不应小于块大小;

-N #:为数据空间创建多少个iNode

-O FEATURE[,...]:启用给指定特性

  ^FEATURE:关闭指定特性

3.mkswap命令:创建交换分区

mkswap [OPTIONS] device

-L ‘LABEL’:指定卷标

注意:格式化的分区是交换分区,要提前调整分区ID82


3.管理文件系统的工具:

管理文件系统的工具有:blkide2labeltune2fsdumpe2fs.

blkid:块设备属性信息查看

blkid [OPTION]... [DEVICE]

-U UUID: 根据指定的UUID来查找对应的设备

-L LABEL:根据指定的LABEL来查找对应的设备

e2label:管理ext系列文件系统的LABEL

# e2label DEVICE [LABEL]

tune2fs:重新设定ext系列文件系统可调整参数的值

-l:查看指定文件系统超级块信息;super block

-L 'LABEL':修改卷标

-m #:修预留给管理员的空间百分比

-j: 将ext2升级为ext3

-O: 文件系统属性启用或禁用

-o: 调整文件系统的默认挂载选项

-U UUID: 修改UUID号;

dumpe2fs:

-h:查看超级块信息

5.文件系统检测:

命令有:fscke2fsck

fsck: File System CheCk

fsck.FS_TYPE

fsck -t FS_TYPE

  -a: 自动修复错误

  -r: 交互式修复错误 

e2fsck:ext系列文件专用的检测修复工具

  -y:自动回答为yes; 

  -f:强制修复

6.Linux文件系统是如何运行

linux系统中文件和目录是由权限(rwx),属性(属主,属组,时间戳等)和数据组成。其中元数据(权限和属性)是存在inode中,而文件的数据是存放在date block中。还有一个超级块:这个超级块会记录整个文件系统的整个整体信息,包括inodeblock数量,blockinode的大小,使用量和未使用量等等。

inode:记录一个文件的属性和权限,以及记录此文件的block编码,除了文件名以外,元信息都存在inode

block:记录文件内容,如果文件太大时,会使用多个block

inode bitmap:inode位视图:用来标记使用和未使用的inode号码

block bitmap:(块对照表):用来记录使用与未使用的block号码

文件系统新创建一个目录,会分配一个inode和至少一个block给该目录。

inode记录该目录的属性和权限,以及记录分配到的block号码。而block记录这个目录下的文件名和inode对照表。

    目录占用的block记录的数据试图如下

Linux系统--Linux磁盘和文件系统管理_第1张图片

   查找一个文件的过程:首先会先找到该文件所在目录的inode号,根据inode号记录的block号码,去找到记录文件名和inode对照表的block。根据文件名和inode对照表中文件的block号码,从而找到文件的date block。假如我们查看目录/tmp/下的kk文件如下图:

 Linux系统--Linux磁盘和文件系统管理_第2张图片

软连接和硬链接

 硬链接:

一般情况下,文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名。但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问

 不能够对目录进行

 不能跨越分区进行

 多个文件指向同一个inode的多个不同路径,创建文件的硬链接即为为inode创建性的引用路经,因此会增加起引用计数

 创建硬链接:

 ln SRC DEST

 符号连接:

 可以对目录进行

 可以跨分区

 指向的是一个文件路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的引用计数

 创建软连接:ln sv SRC DEST


6.挂载:

分区格式化之后就可以挂载使用这个分区了。

将额外文件系统与跟根文件系统某现存的目录建立起关联关系,进而使得其目录作为其他文件访问入口的行为称为挂载。

把设备关联挂载点:挂载点:Mount Point

卸载时:可以使用设备也可以使用挂载点,使用命令umount

假如在挂载点下有文件,则在挂在后挂载点中的文件将会被暂时隐藏

挂载方法:

mount:通过查看/etc/mtab文件显示当前系统一挂载的所有设备。

查看内核追踪到自己已挂载的所有设备:cat /proc/mounts

mount [fnrsvw] [-t vfstype] [-o OPTOION] DEVICE DIR

device :指明挂载设备:

(1)设备文件

(2)卷标:-L "LABEL" 

(3)UUID,-U ‘UUID'

(4)伪文件系统:proc,sysfs,devtmpfs,configfs

dir:挂载点:

事先存在,最好使用空目录

正在使用中的设备是无法卸载的

常用选项:

-t vsftype:指定要挂载的设备上的文件系统类型

-r:readonly,只读挂载

-w:read and write:读写挂载

-n:不更新/etc/mtab文件 (但是在/proc/mounts能看到)

/etc/mtab

-a:自动挂载所有支持自动挂载的设备;(定义在/etc/fstab文件中,且挂载选项中有“自动挂载”功能)

-L:‘LABEL’ :一卷表指定挂载设备

-U;'UUID"

-B: --bind :绑定目录当另一个目录上

-o option:(挂载文件系统的选项)

  async:异步模式;

  sync:同步模式.数据安全性高,但是性能高

  atime 

  noatime :每次访问挂载点下的文件或目录时,访问时间戳是不会改变的

  diratime

  nodiratime:每次访问挂载点下的目录时,访问时间戳是不会改变的

  auto/noauto:是否支持自动挂载

  exec/noexec:是否支持将文件系统上应用程序运行为进

  dev/nodev:是否支持在此文件系统使用设备文件

  suid/nosuid

  remount:重新挂载。

  ro:

  rw:

  user/nouser:是否允许普通用户挂载此设备

  acl:启用此文件系统上的acl功能

卸载:

umount 挂载点或者挂载设备

查看正在访问挂载设备文件系统的程序进程:

fuser -v /MOUNT_POINT

终止正在访问挂载设备文件系统的程序进程

fuser -km /MOUNT_POINT

挂载交换分区:

启用:swapon

swapon [option]... [device]

-a;激活所有的交换分区

-p PRIORITY:指定优先级:

禁用:swapoff


至此一个磁盘经过分区,格式化,挂载之后用户就可以使用这个磁盘中的分区了。