Linux磁盘及文件系统管理

设备类别:

(block):随机访问,数据交换单位为“块”

字符(character):线性,数据交换单位为字符

 

设备文件:FHS(LSB)

/dev/: 设备   #[设备号]#[设备号]

设备文件,关联至设备的驱动程序

 

设备号:

major:主设备号,区别设备类别,用于标明所需驱动程序

minor:次设备号,用于表示同一种类别的不同设备号

 

mknod命令:

mknod[OPTION]... NAME TYPE [MAJOR MINOR]

 -m, --mode=MODE设置rwx权限

mknod ./testdev c 100 1

         c:字符设备  100:主设备号 1:次设备号

 

 

磁盘设备文件:

每一种接口决定了一种线缆的使用方式,和一种传输协议。

 

IDE接口(ATA):并行, 133MB/s

两个IDE控制器:每个控制器可通过线缆接入两块磁盘,一主一从;

/dev/hd[a-z][#]    /dev/hda1

/dev/hda,/dev/hdb,

/dev/hdc,/dev/hdd

 

 

SCSI接口: 并行,Small Computer System Interface

例如:UltraSCSI 320,320MB/s

SATA接口:串行,SerialATA,

例如:SATA3接口:6Gpbs

USB接口:串行

SAS接口:SCSI的串行接口        

 

设备文件:/dev/sd[a-z][#]

[a-z]:标记设备

[#]:磁盘分区

 

 

 

 

磁盘的组成:

磁盘主要是由盘片、机械手臂、磁头和主轴马达,而数据的写入其实是在盘片上的。盘片上又可以细分出扇区与柱面两种单位,512bytes组成一个扇区。

 

整块磁盘的第一扇区记录着MBR(master bootrecord 512bytes)只能引导单块硬盘小于2T的硬盘,大于2T的用GPT

446bytes:主引导分区,BootLoader,一个程序,启动操作系统

64bytes:分区表,记录整块硬盘的分区状态,16bytes标示一个分区,所以一个计算机只能有4个主分区[4个主分区:3主,1扩展-->n逻辑分区]

2bytes:用来标示MBR是否有效

 

分区标识方式:

主分区[p]或扩展分区[e]1-4

逻辑分区:5+

 

 

fdisk命令:

1、查看已经识别的磁盘设备:

fdisk -l /dev/[hs]d[a-z]

fdisk -l

 

2、管理分区

 fdisk DEVICE

 

fdisk提供了一个交互式接口来管理分区,它有许多子命令,分别用于不同的管理功能;所有的操作均在内存中完成,没有直接同步到磁盘;

常用命令:

p: 显示现有分区表;

n: 创建新分区

d: 删除现有分区

t: 修改分区ID

l: 查看支持哪些分区ID

w: 保存退出

q: 不保存退出

m: 显示帮助信息

 

 

查看内核是否已经识别新建分区:

# cat /proc/partitions

 

通知内核强制重读分区表[对于一个已经存在的磁盘,在上面创建分区,内核是不会直接识别的]

CentOS 5: partprobe /dev/DEVICE

CentOS 6: partx, kpartx

partx -a /dev/DEVICE

例:partx -a /dev/sda

kpartx -af /dev/DEVICE

例:kpartx -af /dev/sda

注意:成功读取分区,可能需要命令重复执行2次或以上;

 

 

 

文件系统:

一个可被挂载的数据为一个文件系统而不是一个分区

 

文件系统通常会将这两部分的数据分别存放在不同的块,权限和属性放置到inode实际参数放在data bolck。另外,还有一个superbolck,会记录整个文件系统的整体信息,包括inodeblock的总量、使用量、剩余量等。

super block:记录此文件系统的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息;

inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block

block:实际记录文件的内容,若文件太大是,会占用多个block

 

注意:文件系统一开始就将inodeblock规划好了除非重新格式化(或者用resize2fs等命令更改文件系统大小),否则inodeblock是固定不变的

 

文件系统最前面有一个启动扇区(boot sector),这个启动扇区可以安装引导转载程序

 

一个块组的6个主要内容:

 

data block1. ext文件系统中所支持的block大小有1KB2KB4KB三种;

2. 每个block内最多只能放置一个文件的数据;若文件大于block的大小,则文件会占用多个block数量;若文件小于block的大小,则该block的剩余空间就不能再被使用了(磁盘空间会浪费)

3. 原则上,block的大小和数量在格式化完就不能够在改变了;

 

inodetable(inode表格):  1.该文件的访问格式(r,w,x)

2.该文件的属主属组

3. 该文件的大小

4. 该文件创建或状态改变的时间(ctime)

5. 该文件最近一次读取时间(atime)

6. 该文件最近一次修改时间(mtime)

7. 定义文件特性的标志(flag),例SUID

8. 该文件真正内容的指向

inode的特点

1. 每个inode大小均固定为128bytes

2. 每个文件都只会占用一个inode,所以文件系统上能创建的文件个数与inode的数量有关

3. 系统读取文件是需要先找到inode,并分析inode所记录的权限和用户是否符合,若符合才能开始实际读取block的内容

4. 一个inode只有12个直接、一个间接、一个双间接与一个三间接记录区

5.inode不记录文件名,文件名的记录在目录block

super block: 是记录整个文件系统相关信息

1.blockindoe的总量

2.未使用与已使用的inodeblock数量

3. blockinode的大小(block1K2K4Kinode128bytes)

4. 文件系统的挂载时间、最近一次写入数据的时间、最近一次检测磁盘(fsck)的时间等文件系统的相关信息

4. 一个validbit数值,若此文件系统已被挂载,则valid bit0,反之为1

5. 一般super block的大小为1024bytes

6. 每个block group都有可能含有super block。第一个block group是会含有super block,但后续的block group也有可能含有super block,主要是用于作为第一个blockgroup的备份

 

block bitmap(块位图): 可以知道哪些block是空的

inode bitmap(inode位图): 可以知道哪些inode是未使用的,哪些是使用的

 

 

查找/var/logs/messages的过程:

1.根的inode --> 根目录对应的磁盘块 --> var对应的inode编号 --> inode table, 找到编号对应的inode --> var目录的磁盘块 -->logs inode编号--> inode table, 找到logs目录的inode --> logs目录的磁盘块 --> 找到messages文件名对应的inode编号 -->inode表,找到messagesinode编号对应的inode --> messages的磁盘块

 

2.先查/ inode-> /目录block中对应的varinode->根据查到的/var inode去查/var/目录 block中对应的logs inode->根据查到的/var/logsinode去查 /var/logs目录blockmessagesinode->根据查到的messages inode去查block发现时文件->读取数据[中间省略了inode的权限判断]

 

可以归纳为inode->block->inode->block->…->block读取数据

 

目录:

创建一个目录时,文件系统会分配一个inode和至少一个block给该目录。其中inode记录该目录的相关权限与属性,并记录分配到的block的号码;而block则是记录在这个目录下的文件名和该文件名对应的inode


 

 

链接文件:访问同一个文件数据不同路径

硬链接:不同目录的两个文件路径指向了同一个inode

创建方法:

# cp -l SRC DEST

# ln SRC DEST

 

特性:

(1) 目录不支持硬链接

(2) 硬链接不能跨文件系统;

(3)硬链接文件与原文件是指向同一个inode,创建硬链接文件会增加inode的引用计数

使用hard line设置连接文件时,磁盘的空间与inode的数目都不会改变,只是在某个目录下的block多写了一个关联数据。

 

符号链接:链接文件是一个完全独立的新文件,但其指向了原文件的文件路径;

特性:

(1) 符号链接文件与原文件是两个各自独立文件

(2) 目录可以创建符号链接;

(3) 可以跨文件系统;

(4) 删除链接不影响原文件;但删除原文件,符号链接指向的文件路径将不复存在,因此,此时链接文件将变成失效的链接;

 

其大小并非真正原文件大小,而是指向的原文件的文件路径字符串所包含的字节数;

 

创建方法:

ln -s SRC DEST

 

 

VFS: Virtual FileSystem虚拟文件系统

整个Linux的系统都是通过VFS的内核功能去读取文件

Linux文件系统:ext2,ext3, ext4, reiserfs, xfs, btrfs

光驱:iso9660

网络文件系统:nfs, cifs

集群文件系统:gfs2, ocfs2

分布式文件系统:ceph

windows文件系统:ntfs,vfat

伪文件系统: tmpfs, hugepagefs, proc, sysfs

Unix的文件系统:FFS,UFS, JFS

交换文件系统:swap

 

日志型文件系统[ext3,ext4]和非日志型文件系统[ext2]的区别:

日志型写入步骤:1.预备,当系统要写入文件时,会先在日志记录块中记录某个文件准备要写入的信息

 2.实际写入,开始写入文件的权限和步骤;开始更新meta data[中间数据]的数据

 3. 结束,完成数据与metadata的更新后,在日志记录块中完成该文件的记录

非日志写入步骤:1. 先确定用户对于欲添加文件的目录是否有wx权限,若有的话才能添加

 2.根据inode bitmap 找到没有使用的inode号码,并将新文件的权限/属性写入

 3.根据block bitmap 找到没有使用的block号码,并将实际数据写入block中,且更新inodeblock指向数据

 4.将刚才写入的inodeblock数据同步更新inode bitmapblock bitmap,并更新superblock的内容

当中途断电等因素导致系统中断时,会出现数据的不一致状态,这时非日志文件系统需要进行一致性检查,很费时间。而日志文件系统,只需要去检查日志记录块就可以知道那个文件发生了问题,不必去针对整块文件系统去检查。

 

创建ext系列文件系统命令:mke2fs

mke2fs [OPTION]... /dev/DEVICE

-t {ext2|ext3|ext4}:指明要创建的文件系统类型

mkfs-t ext4 = mkfs.ext4 = mke2fs -t ext4

-b {1024|2048|4096}:其上限由page frame决定

-L LABEL:指定要使用的卷标[使用时,LABEL='MYLABELNAME']

-j: 相当于使用-text3

mkfs.ext3= mkfs -t ext3 = mke2fs -j = mke2fs -t ext3

-i #: 指明inode与字节的比率[不加% ];即,每多少字节给创建一个inode

-N #: 直接指明给此文件系统创建多少个inode

-m #:指定预留空间的百分比[只有root能用,不用%];默认为5

-O [^]FEATURE:可以用来指明这个文件系统额外可以具有的属性,具体可以查看man手册

例:-o has_journa 启用日志属性

-o ^has_journa 不启用日志属性

 

创建文件系统

mkfs.ext2, mkfs.ext3, mkfs.xfs ...

 

 

e2label: 调整卷标

查看:e2label /dev/DEVICE

设定卷标:e2label /dev/DEVICE LABEL

 

tune2fs:查看或修改ext系列文件系统的某些属性

查看超级块中的数据信息:如UUID:全局惟一标识符

tune2fs-l /dev/DEVICE

tune2fs -l /dev/sda5

 

修改指定文件系统的属性:

-j:ext2 --> ext3

-L LABEL: 修改卷标;

-m #: 调整预留空间的百分比;

-O [^]FEATURE: 开启或关闭某种特性

 

-o [^]mount_options: 开启或关闭某种默认挂载选项

-o acl开启acl

-o ^acl关闭acl

 

dumpe2fs命令:显示ext系列文件系统属性信息

dumpe2fs[-h] /dev/DEVICE

dumpe2fs -h/dev/sda5

blickid命令:可以查看文件类型

文件系统检测:

 

因进程意外中止或系统崩溃等原因导致写入操作非正常终止时,可能会导致文件损坏;此时,应该修改修复文件系统;

注意:应该离线进行[文件系统不应该处于挂载状态,先卸载]

 

检测文件系统

fsck.ext2, fsck.ext3, fsck.ext4, fsck.xfs ...

 

fsck:文件系统检查命令

-tFSTYPE

fsck-t FSTYPE = fsck.FSTYPE

fsck -t ext4 修复即删除不一致文件

-a:自动修复所有错误[慎用]

-r: 交互式修复错误

 

ext系列文件系统的专用工具:

e2fsck

-y: 对所有问题自动回复为yes;

-f: 即使文件系统处于clean状态,也要强制进行检测;

 

Windows无法识别Linux上专用的文件系统,因此,有存储设备需要两种系统之间交叉使用时,应该使用windows支持的文件系统:

#mkfs -t vfat /dev/DEVICE

 

 

swap文件系统:

Linux上交换空间必须使用独立的磁盘分区

fdisk/dev/DEVICE

t命令调整其ID82;

创建交换分区文件系统:mkswap命令

mkswap [-L LABEL] /dev/DEVICE

 

free命令:显示当前系统内存的空闲和使用状况,即查看内存使用状况

-mMB为单位

-g  G为单位

启动交换分区:

swapon [OPTION] [DEVICE]

-a: 启用/etc/fstab文件中定义的所有交换分区

  swapon /dev/sda6[注意sda6是事先fdiskswap]

禁用交换分区:

swapoffDEVICE

  swapoff /dev/sda6

 

 

 

挂载:

注意:1.Linux系统上,所有的文件系统必须通过根文件系统的某个分支来访问;

 2.单一文件系统不应该被重复挂载在不同的挂载点(目录)

 3.单一目录不应重复挂载多个文件系统

  4.作为挂载点的目录理论上应该都是空白目录,不然原来目录下的文件会被隐藏

 

根文件系统:根是一切文件系统的访问入口,根关联到的分区,有一定的要求:FHS

除了根,其余所有的其它文件系统如果想要被访问,都只能够通过“关联”至根文件系统上的某个目录来实现;这种操作即所谓的“挂载”,也即mount;相反动作,即卸载,命令为umount

 

挂载点:mount_point,即用于作为另一个文件系统访问入口的目录;

 

mount命令:

mountDEVICE MOUNT_POINT

 

挂载点

1、事先存在;

2、应该使用别的进程未使用的目录;

3、挂载点下原有的文件将被隐藏;

 

mount:将显示当前系统已经挂载的所有文件系统的相关信息;

 

mount[OPTION]... [-t FSTYPE] [-o OPTION] [DEVICE] MOUNT_POINT

命令选项:

-r: 只读挂载

-w: read and write,读写挂载

-t FSTYPE: 被挂载的设备上的文件系统类型;可省略,此时mount会自动使用blkid命令来判断之;

-L LABEL: 以卷标的方式指定要挂载的设备,因此,此时DEVICE必须省;

-U UUID:以UUID的方式指定要挂载的设备,因此,此时DEVICE必须省;

-a: 自动挂载所有的支持自动挂载的设备(/etc/fstab文件中定义的支持自动挂载的设备);

-n: 默认情况下,设备挂载与否的改变结果会被保存于/etc/mtab中一份;-n选项用于变动时不更新此文件

 

示例:

#mount -U dea669ee-e769-46d9-86a8-88925a10278b /data/mydata

 

-o OPTION,挂载选项[多个时用,隔开   : -o noatime,exce,acl]

async:异步写入

sync:同步写入,即使用同步I/O

atime/noatime:文件或目录在被访问时是否更新其访问时间戳;

diratime/nodiratime:目录在文中时是否更新其访问时间戳;

auto/noauto:设备是否支持mount命令使用-a选项时自动挂载;

dev/nodev:此设备上是否创建设备文件;

exec/noexec:是否允许执行此文件系统上的程序文件;

suid/nosuid:是否支持此设备上的文件上使用suid权限;

remount: 重新挂载;

acl: 支持使用facl

#mount -o acl

# tune2fs -o acl /dev/DEVICE打开acl为默认挂载选项;

ro: 只读

rw: 读写

user/nouser: 是否允许普通挂载此文件系统

 

所有挂载选项均未指明时,其默认为:

defaults

                                     Usedefault options: rw, suid, dev, exec, auto, nouser, async, and relatime.

 

                     另外一个使用技巧:

                             将某目录绑定至指定目录下,作为临时访问入口;

                                     mount--bind 源目录  目标目录

计算机生成了可选文字:root e b ogon root e bogon first . sh root e bogon root e b ogon root e b ogon mount ― ―bind / home/ centos/ /data/mydata/ I s / data/mydata/ umount / data /mydat a / I s / data/mydata/

 

            查看所有已经挂载设备的方法:

                    #mount

                    #cat /etc/mtab

                    #cat /proc/mounts

 

umount命令:

umount DEVICE

umount MOUNT_POINT

例:umount /dev/sda5

umount /data/mydata

 

注意:正在被某进程访问的设备是不可以被卸载的;查看被什么进程所占用:

#lsof MOUNT_POINT

#fuser -v MOUNT_POINT

 

# fuser -km MOUNT_POINT: 终止正访问挂载点的进程;

 

 

 

df命令:列出文件系统的整体磁盘使用量

df[OPTION]... [FILE]...

-l: 仅显示本地文件系统的相关系统;

-h: 单位换算;

-i: 显示inode的使用情况而非磁盘块的;

-T:连同该分区文件系统的名称(例ext4)也列出

 

du命令:评估文件系统的磁盘使用量(常用于评估文件、目录所占容量)

du 文件或目录名

-s: 统计整个目录及内部所有文件总体大小;

-h:human-readable

du -sh /*  查看/下目录的大小

 

 

 

 

文件系统相关的配置文件: /etc/fstab

定义开机可自动挂载的文件系统,每行一个:

6个字段:

(1) 挂载的设备:

设备文件

LABEL

UUID

伪文件系统:如sysfs, proc, tmpfs

(2) 挂载点

swap的挂载点仍为swap

(3) 文件系统类型

(4) 挂载选项

defaults表示使用默认挂载选项;

多个挂载选项间使用逗号分隔;如defaults,acl,noatime

(5) 转储频率[多久备份一次],只有一下三种,一般不备份:

0:从不备份

1: 每天备份

2: 每隔一天备份

(6) 自检次序[大多不自检,可以开机手动自检,mount命令]

0:不自检

1:首先自检,通常只有根文件系统可首先自检

2:次级自检,

...

mount -a 会自动读取/etc/fstab文件,并自动挂载

 

例:开机挂载/dev/sda5/data/mydata并开启acl,禁止程序自动运行,且不更新文件的访问时间戳

 


你可能感兴趣的:(linux,磁盘,文件系统管理)