文件系统管理和挂载

磁盘结构

设备类型:

    块设备:block,存取单位“块”,例如,磁盘

    字符设备:char,存取单位“字符”,键盘

设备文件:关联至一个设备驱动程序,进而能够跟之对应硬件设备进行通信

设备号码:

    主设备号:major number,表示设备类型

    次设备号:minor number 标识同一类型的不同设备

硬盘接口类型

并行接口:

    IDE:133MB/s   B指的是字节,等于8位

    SCSI:640MB/s

串口:

    SATA:6Gbps   b指的是位

    SAS:6Gbps

    USB:480MB/s

设备文件

磁盘设备的设备文件命名:/dev/DEV_FILE

IDE:/dev/hd

SCSI,SATA.SAS,USB:/dev/sd

    不同设备:a-z

        /dev/sda, /dev/sdb,…..

同一设备上的不同分区:1.2.3….

        /dev/sda1,/dev/sda2,….

磁盘结构

blob.png

head:磁头2^8=256

磁盘上文件的读取就是通过磁头和盘片的接触来实现的,用接触可能不对,但是比较形象,好理解

track:磁道2^10=1024

cylinder: 柱面 2*6=64

secotr:扇区,512bytes

磁盘空间大小=磁头数*磁道数*每磁道扇区数*扇区大小

使用分区空间

    设备识别

    设备分区

    创建文件系统

    标记文件系统

    在 在/etc/fstab 文件中创建条目

    挂载新的文件系统 

磁盘分区优点:

    优化I/O 性能

    实现磁盘空间配额限制

    提高修复速度

    隔离系统和程序

    安装多个OS

    采用不同文件系统

分区方式:MBR和GPT

MBR:Master Boot Record,使用32位表示扇区数,分区最大容量不超过2T

如何分区:柱面

MBR在磁盘的0磁道0扇区上,512btyes,其中446bytes存放:boot loader

64bytes存放分区表,16个bytes标识一个分区,所有一般系统只能分64/16=4

个主分区,就是因为这里只能分成4个,最后的2bytes存放55AA,不要小看这两个bytes

,如果损坏了,分区表会显示不出来

4个主分区:3主分区+1扩展(N和逻辑分区)

MBR分区结构(可以更直观理解)  

blob.png

GPT分区

GPT:GUID(Globals Unique Identifiers) partition table

支持128个分区,使用64位表示扇区数,支持8Z(512Byte/blokc) 64Z(4096Byte/block)

使用128位UUID表示磁盘和分区GPT分区表自动备份在头和尾两份,并有CRC校验位

UEFI(统一扩展固定接口)硬件GPT,是操作系统启动

EFI部分又可以分为4个区域:EFI信息区(GPT头)、分区表、GPT分区、备份区域

blob.png

GPT分区结构:

在GPT分区中的第一个数据块中有一个 protective MBR(PMBR),其作用为当使用不支持GPT的分区工具时,

整个磁盘将显示为受保护的分区,以防止分区表及磁盘数据遭到破坏。UEFI并不从PMBR中获取GPT磁盘的分

区信息,它有自己的分区表,即GPT分区表。

GPT分区数量为128个,取用的64位表示,即每个分区最大空间为2^64位,无法想象的大,GPT在磁盘的末端

有一个本分分区表,保证了分区信息不容易丢失

管理分区

列出块设备

    lsblk

blob.png

创建分区使用:

    fdisk创建MBR分区,也支持GPT,对于一个硬盘,最多只能管理15个分区

    gdisk创建GPT分区

    GNU parted高级分区操作(创建,复制,调整大小等等)

patprobe :重新设置内存中的内核分区表版本

fdisk /dev/sdb

gfisk /dev/sdb  类fdisk的GPT分区工具

# fdisk -l [-u] [device…]

子命令:

    p  分区列表

    l  查看

    t  更改分区类型

    n  创建新分区

    d  删除分区

    w  保存并退出

    q  不保存并退出

在centos7上start和end是以扇区为单位,在centos6上是以柱面为单位的

blob.png

使用t调整分区,一下例子为将分区5调整为swap分区

blob.png

当使用fdisl增加或删除分区时,如果出现Warning提示,要使用partprobe等命令重新设置(读取)内存中的内核分区表

如果不使用时,新修改的分区时不显示的,查看命令是查看不到新修改的分区

注意:在已经分区并且已经挂载其中中的某个分区的磁盘设备上创建的新分区,内核可能在创建完成后无法直接识别;

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

cat /pro/partations

blob.png

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

centos5 :partprobe

chentos7: partx ,kpartx

    partx -a [设备] 增加时使用(有时候需要连续读取两次才能成功)

    kpartx -af [设备]

    partx -d [设备] 删除时使用

blob.png

parted命令

parted 的操作都是实时生效的,小心使用,不做详细说明

用法:parted [ 选项]… [备 设备 [令 命令 [ 参数]…]…]

    parted /dev/sdb mklabel gpt|msdos

    parted /dev/sdb print

    parted /dev/sdb mkpart primary 1 200  (默认M) )

    parted /dev/sdb rm 1

    parted -l

文件系统    

文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。

操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统

从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件促出并对存入的文件进行保护

和检索的系统。几天来说,他负责为用户建立文件,存入,读出,修改,存储文件,控制文件的存取,安全控制,

日志,压缩,加密等

文件系统类型:

linux文件系统:ext2,ext3,ext4,xfs(centos7),btrfs(目前最好的,但是出于验证阶段),reiseerfs,

jfs,swasp

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

光盘:iso9660

Windows:fat32,ntfs

Unix:FFS  UFS  JFS2

网络文件系统:NFS,CIFS

集群文件系统:GFS2,OCFS2(oracle)

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

RAW:未经处理或者未经格式化产生的文件系统

文件系统分类:

根据其是否支持“journal”功能:

    日志型文件系统:ext3,ext4.xfs….
    非日志型文件系统:ext2,vfat

日志文件系统的优点:

当我们修改一个大文件时,系统是先将文件读取到内存中,然后在内存中修改,如果没有日志文件系统,在文件修改完成后,

内存会把修改后的文件返回至磁盘中,如果此时出现了什么故障导致系统断电了,那么这个文件就会损坏掉了,

而在日志文件系统中,在内存在修改文件时都会把文件修改记录在日志中,修改完了后,即使在内存把文件返回至磁盘中断电了,文件被损坏了,

也可以在日志中找到原文件,避免了损失!!!

日志文件的缺点:

需要占用空间,有性能的损失,占有资源

文件系统的组成部分:

    内核中的模块:ext4,xfs,vfat

    用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat

linux的虚拟文件系统:VFS

查看支持的文件系统:cat  /proc/filesystems

centos7支持的文件系统

blob.png

centos6支持的文件系统

blob.png

VFS: linux的虚拟文件系统,linux与各个文件系统的中间层,实现了linux支持各个文件系统的使用

blob.png

创建文件系统

文件系统管理工具:

    创建文件系统工具

    mkfs    

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

    检测及修复文件系统工具

    fsck

    fsck.ext2,fsck.ext3,….

    查看其属性的工具

    dumpe2fs  tune2fs

    调整文件系统特性

    tune2fs

内核级文件系统组成部分:

    文件系统驱动:有内核提供

    文件系统管理工具:由用户空间的应用程序提供

 ext系列文件系统的管理工具:

    mkfs.ext2(无日志功能),mkfs.ext3,mkfs.ext4

    mkfs -t ext2 = mkfs.ext2

    mkfs -t ext3 = mkfs.ext3

[root@localhost ~]# mkfs.ext2 /dev/sd6
mke2fs 1.41.12 (17-May-2010)
Could not stat /dev/sd6 --- No such file or directory

The device apparently does not exist; did you specify it correctly?
[root@localhost ~]# mkfs.ext2 /dev/sda6
mke2fs 1.41.12 (17-May-2010)
Filesystem label=       ===>文件系统标签
OS type: Linux         ===>操作系统
Block size=4096 (log=2)   ===>块大小
Fragment size=4096 (log=2)   ===>分块大小
Stride=0 blocks, Stripe width=0 blocks
642112 inodes, 2564367 blocks   =====>inode数量和块数量
128218 blocks (5.00%) reserved for the super user   ===>给管理员预留的空间
First data block=0    ====>第一个数据块编号为0
Maximum filesystem blocks=2629828608  ====>最大文件系统块编号
79 block groups  ===>块组数量
32768 blocks per group, 32768 fragments per group  ====>每个块组中有多少个块
8128 inodes per group   ===>每个块组中有多少个inode
Superblock backups stored on blocks:  ===>超级块存放在那个数据块上
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Writing inode tables: done                            
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 24 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@localhost ~]#

创建ext3,ext4,文件系统时,和上面一样,只是多了一项日志功能

Creating journal (32768 blocks): done


blkid命令

-L LABEL: 根据LABEL定位设备

-U UUID : 根据UUID定位设备

查看文件系统

blob.png

如果此文件系统没有数据,可以直接使用mkfs.ext3格式化为ext3文件系统

mkfs.ext3 /dev/sd6

blob.png

ext4和ext3相比差不多,只是性能上强大了许多

blob.png

在centos6上默认是不支持xfs文件系统的,我们使用yum install xfsprogs命令,在centos6上安装xfsprogs

使之可以使用xfs文件系统,看看效果

blob.png

ext系列专用文件系统管理工具:mke2fs

    mke2fs [options] device

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

以下全部都可以用来创建ext系列的文件系统:

        mkfs.ext3 = mkfs -t ext3 = mke2fs -t ext3 =mke2fs -j(专用于ext3)

    -b{1024|2048|4096}:指明文件系统的块大小;现在默认4096

    -L LABLE:指明卷标

    -j:创建有日志功能的文件系统ext3

    -i #:每多少字节一个inode,指明inode与字节的比率

    -N #:直接指明要给此文件系统创建的inode的数量

    -O [^]feature:以指定的特性创建目标文件系统,不加“^”表示启用此特性,加了表示禁用此特性

    -m #:指定预留的空间的百分比;直接给数字 %5就输出 -m 5 

注意:不要用tune2fs查看xfs文件系统,tune2fs只能在ext系列文件系统上使用

       [root@localhost ~]# blkid /dev/sda6
/dev/sda6: UUID="5ffc43fa-fa65-4060-b99d-9015da2f52d5" TYPE="xfs" 
[root@localhost ~]# mke2fs -t ext4 -L laozihenfan -b 2048 /dev/sda6 
mke2fs 1.41.12 (17-May-2010)
Filesystem label=laozihenfan  ====>指明卷标
OS type: Linux
Block size=2048 (log=1)       =====>指明块大小2048
Fragment size=2048 (log=1)
Stride=0 blocks, Stripe width=0 blocks
643072 inodes, 5128734 blocks
256436 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=542113792
314 block groups
16384 blocks per group, 16384 fragments per group
2048 inodes per group
Superblock backups stored on blocks: 
	16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816, 1327104, 
	2048000, 3981312

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 24 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@localhost ~]#

e2lable ;管理ext系列文件系统的卷标

可增加修改

blob.png

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

注意:只能是某些属性,例如:块大小创建后不可修改;

选项:

    -l:显示超级块中的信息;

    -j:将ext2升级为ext3

blob.png

    -L lable:修改卷标

    -m #:调整预留给管理员空间的百分比(默认5%)

blob.png

    -O[^]feather:开启或关闭某种特性;关闭了日志就变成了ext2,开启了有变成了ext3(ext2和3的区别就在于有无日志)

blob.png

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

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

    -h:只显示超级块中的信息

检测并修复文件系统

    因进程意外终止或系统崩溃等原因导致定稿操作非正常终止时,可能会造成文件损坏,此时,

应该检测并修复文件系统;建议离线进行

e2fsck:只能对ext系列文件系统有效

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

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

    -p:自动修复

fsck:通用型

    -t:指明文件系统类型

    -a:自动修复

    -r:交互式修复错误

总结:

创建 :mkfs.ext2, mkfs -t 

检测:fsck.xfs 

挂载mount

挂载:将额外文件系统与根文件系统某个现存的目录建立起关联关系,进而使得此目录作为

其他文件访问入口的行为

卸载:将某文件系统与当前根文件系统的关联关系预以移除

根文件系统之外的其他文件系统要想能够被访问,都必须通过“关联”只根文件系统上的某个目录来实现

,此关联操作即为“挂载”,此目录即为“挂载点”

挂载点:用于作为另一个文件系统的访问入口

    1.事先存在

    2.应该使用未被或者不会被其他进程使用到的目录

    3.挂载点下原有的文件会被隐藏

mount命令

mount:显示当前系统已经挂载的设备及挂载点

blob.png

挂载/dev/sda6 到/mnt下

mount  /dev/sda6  /mnt

blob.png

命令选项

    -r:readonly,只读挂载

blob.png

    -w:read and write 读写挂载(默认为读写)

    -n:默认情况下,设备怪在或卸载的操作会同步更新至/etc/mtab文件中

        加上-n选项用于禁用此特性(即不更新至/etx/mtab中)

blob.png

    -t vfstype:指明要挂载的设备上的文件系统的类型,可省略,因为mount会通过blkid来判断

要挂载的设备的文件系统类型

    -L:挂载时以卷标的方式指明设备

        mount -L LABEL /mnt

    -U:挂载时以UUID的方式指明设备

        mount -U UUID /mnt

-o 0ptions:挂载选项

    async :异步模式

    sync :同步模式, 内存更改时,同时写磁盘

    atime/noatime :包含目录和文件

    diratime/nodiratime :目录的访问时间戳

    auto/noauto :是否支持自动挂载, 是否支持-a 选项

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

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

    suid/nosuid :不否支持suid 和sgid 权限

    remount :重新挂载

    ro :只读

    rw: : 读写

    user/nouser :是否允许普通用户挂载此设备,默认管理员才能挂载

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

 Defaults :相当于rw, nosuid, dev, exec, auto, nouser, async

挂载目录

    可以实现将目录绑定之另一个目录上,作为其临时访问入口 

    mount –bind 源目录  目标目录

 blob.png      

umount:卸载某文件系统

   umount /mnt

 无法卸载处于繁忙状态的挂载点(正在被进程访问到的挂载点无法被卸载)

blob.png

查看正在访问指定文件系统的进程

    lsof mount

    fuser -v mount 

blob.png

终止使用正在访问知道的文件系统的进程:

    fuser -km 

查看挂载情况:

    findmnt

挂载未完待续….




原创文章,作者:qiuwei,如若转载,请注明出处:http://www.178linux.com/40224

(0)
上一篇 2016-08-29 08:49
下一篇 2016-08-29 08:52

相关推荐

  • PHP的类自动加载机制

    在PHP开发过程中,如果希望从外部引入一个class,通常会使用include和require方法,去把定义这个class的文件包含进来。这个在小规模开发的时候,没什么大问题。但在大型的开发项目中,这么做会产生大量的require或者include方法调用,这样不因降低效率,而且使得代码难以维护,况且require_once的代价很大。 在PHP5之前,各个…

    Linux干货 2015-04-10
  • 磁盘管理

      磁盘管理是一项计算机使用时的常规任务,它是以一组磁盘管理应用程序的形式提供给用户的,它们位于"计算机管理"控制台中.它包括查错程序和磁盘碎片整理程序以及磁盘整理程序。   一磁盘分区     1为什么要分区?     •优化I…

    Linux干货 2016-09-02
  • Linux-Centos7编译内核

    编译内核     前提:         (1)准备好开发环境         (2) 获取目标主机上硬件设备的相关信息         (3) 获取目标主机系统功能的相关信息       …

    2017-07-16
  • 第一周作业-03

    ifconfig命令:查看及临时修改网卡配置信息    查看的用法:ifconfig [-v] [-a] [-s] [INTERFACE]        OPTIONS            -v:详细显示接口报错信息   &nb…

    Linux干货 2016-09-19
  • bash的基础特性之一

    bash的基础特性之一 命令历史:shell进程会保存会话中此前用户使用过的命令; history:命令的用法 history 【-c】【-d #】 【n】或者【文件名】     -c:清空命令历史     -d 【#】:删除指定的命令历史…

    Linux干货 2016-12-18
  • Bash基本特性之命令状态返回值和命令行展开

    Bash基本特性之命令状态返回值和命令行展开 Bash的工作特性 命令执行状态返回值 bash中一条命令的执行,会产生两种返回结果:命令结果及命令执行状态结果。一条命令成功执行,其执行状态返回值为0。如果未能成功执行,其返回值为1-255。 ~]# echo $? 用于查看命令执行状态返回值 引用命令的执行结果$(COMMAND…

    Linux干货 2016-11-06