Linux磁盘与文件系统管理的那些事儿(1)

linux的哲学思想之一:一切皆文件。我们首先了解下与磁盘设备有关的设备文件等基本概念。

设备文件:对于每一个磁盘设备而言,都会有一个设备文件与其设备驱动程序相关联,进而能够与该磁盘设备进行通信。

设备号码

  • 主设备号:major number,用来标识设备类型;
  • 次设备号:标识同一设备类型下的不同设备;

硬盘接口类型:
分为并行接口和串行接口;

并行最大传输速度
IDE133MB/s
SCSI640MB/s
串行最大传输速度
SATA6Gbps(相当于0.75GB/s)
SAS6Gbps(相当于0.75GB/s)
USB480MB/s

rpm:rotations per minute 转数每分钟;
track:磁道;
cylinder:柱面;
sector:扇区;

设备文件一般存储在/dev目录下,设备文件命名规则如下:

硬件设备设备文件名
IDE设备/dev/hd[a-d]
SCSI/SATA/U盘/dev/sd[a-p]
软驱/dev/fd[0-1]
打印机/dev/lp[0-15]
光驱/dev/cdrom
鼠标/dev/mouse
磁带机/dev/st0或/devht0(IDE设备)

由于IDE设备现在很少见,所以硬盘设备一般设备文件名为 /dev/sd[a-p] ;a-p表示16块不同的硬盘设备(默认从a开始分配);

  • 主分区编号从1-4按照顺序进行编号(也可指定分配数字);
  • 逻辑分区编号从5开始,按顺序进行编号(也可指定分配数字);

示例:
在这里插入图片描述

分区示例

下面是分区的一种可能:
在这里插入图片描述

MBR
硬盘设备由扇区组成,其中0盘面0磁道0扇区的512个字节存放的是MBR,即Master Boot Record 或 Main Boot Record;MBR共分为三段:
(1)446bytes:Boot loader,启动加载器;
(2)64bytes:Partitions table,保存分区表,每16bytes标识一个分区,最多标识四个主分区,但是在通常情况下,标识三个主分区和一个扩展分区;
(3)2bytes:Magic Number,MBR的有效性标识;一般存有4个16进制数,值为55AA时表示有效,否则为无效;

示意图如下:
在这里插入图片描述

接着,我们来了解linux中的文件系统。

类型常见文件系统
linux中常见的文件系统ext2,ext3,ext4,xfs,brfs,reiserfs,jfs,swap(交换分区,用来划分磁盘空间当做)
光盘文件系统ISO9660
Windowsfat32,nifs
UnixFFS,UFS,JFS2
网络文件系统NFS,CIFS
集群文件系统GFS2,OCFS2
分布式文件系统ceph,moosefs,mogilefs,GlusterFS,lUSTRE

根据有无日志(journal)功能,还可分为:

是否支持日志文件系统
日志型文件系统ext3,ext4,xfs,……
非日志型文件系统ext2,vfat

日志区

当编辑文件时,系统把文件的元数据从元数据区复制到日志区中去;若文件编辑时突然死机或关机,那么,再次开机时系统会首先查看日志区有没有未保存的文件,从而快速的对为正常保存的文件进行处理;
而若无日志区,操作系统需要进行全局检查;所以,日志区的存在大大提高了电脑异常关机时处理为保存文件的效率。

虚拟文件系统VFS:

Linux中有很多种类的文件系统,由VFS来将不同文件系统类型的接口统一成同一种接口。

文件系统的组成部分

文件系统包括两部分:内核中的模块和用户空间的管理工具;

内核中有与不同文件系统类型对应的模块,当用户申请时,用以提供给用户;而用户空间中的管理工具则用来作为用户管理文件系统的工具。

首先,我们先掌握如何对一块硬盘设备进行分区:


fdisk 分区管理工具;对于一块硬盘来说,对多只能管理15个分区;


用法
~]# fdisk -l
列出所有设备的磁盘分区信息;

~]# fdisk -l /dev/Device
列出指定设备的磁盘分区信息;

~]# fdisk /dev/Device
对磁盘设备进行管理,其中要用到很多子命令来实现管理功能;

子命令如下:

  • p:即 print,查看分区表信息;
  • n:即 new,创建新的分区;
  • d:即 delete,删除某个分区;
  • w:即 write,保存并退出;
  • q:即 quit,不保存直接退出;
  • m:即 manul,获得帮助;
  • l:即 list ,列出所有可用的分区;
  • t:调整分区类型,也即分区id;

分区之后,我们要做的事情就是,查看内核是否已经识别到新的分区,方法如下:

~]# cat /proc/partitions

若文件/proc/partitions中有新分区的信息,那么就说明内核已经识别到了新的分区,否则,需要通知内核重新读取硬盘分区表。方法如下:

~]# partx -a /dev/Device
读取指定分区或读磁盘新增的分区;
~]# partx -n M:N /dev/Device
读取磁盘上从分区M到分区N;

示例演示:

我们在虚拟机中添加一块硬盘,步骤如下:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

然后,我们重启系统即可读取到新硬盘了。

由于我们之前只有一块SCSI硬盘,其设备名为/dev/sda,所以,我们新添加的硬盘,其设备名应为/dev/sdb。我们对/dev/sdb进行分区。

[root@localhost jeffrey]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x905e52a2.

//查看分区信息
Command (m for help): p

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x905e52a2

   Device Boot      Start         End      Blocks   Id  System
//创建新的分区
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
//选择p,创建主分区
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-41943039, default 2048): 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +2G
Partition 1 of type Linux and of size 2 GiB is set
//查看分区表信息
Command (m for help): p

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x905e52a2

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     4196351     2097152   83  Linux
//w:将分区信息保存到磁盘上并退出
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks. 
//将分区/dev/sdb1格式化为xfs格式
[root@localhost jeffrey]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@localhost jeffrey]# mkdir /newfs
[root@localhost jeffrey]# mount /dev/sdb1 /newfs
[root@localhost jeffrey]# vim /etc/fstab
[root@localhost jeffrey]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Sun Aug 26 19:02:55 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=8c591fb4-4d46-4a67-9ab8-729cf0cec90e /                       xfs     defaults        0 0
UUID=cc6ed223-ea32-459d-b639-f77e8da35b72 /boot                   xfs     defaults        0 0
UUID=a1467dac-9b82-4460-8460-49aaddac6b19 swap                    swap    defaults        0 0
/dev/sdb1 /newfs xfs defaults 0 0
//查看挂在信息和磁盘使用情况
[root@localhost jeffrey]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        18G  5.0G   13G  28% /
devtmpfs        472M     0  472M   0% /dev
tmpfs           488M     0  488M   0% /dev/shm
tmpfs           488M  8.5M  479M   2% /run
tmpfs           488M     0  488M   0% /sys/fs/cgroup
/dev/sda1       297M  190M  108M  64% /boot
tmpfs            98M   32K   98M   1% /run/user/1000
/dev/sdb1       2.0G   33M  2.0G   2% /newfs

下面我们来学习在一个分区上进行文件系统的创建与管理。


mkfs 创建文件系统,适用于所有的linux支持的文件系统;


用法1
~]# mkfs.FS_TYPE [option] /dev/Device

用法2
~]# mkfs -t FS_TYPE [option] /dev/Device

选项

  • -L LABEL 指定卷标;

mke2fs :ext系列文件系统管理工具,适用于ext2,ext3,ext4;


用法

~]# mke2fs [option] /dev/Device

选项

  • -t [ext2|ext3|ext4] 指定创建的文件系统类型;
  • -b [1024b|2048b|4096b] 指定磁盘块大小;
  • -L LABEL 指定卷标;
  • -j 相当于 -t ext3
  • -i # 为数据空间中每#个字节创建一个inode,此大小应当大于等于block的大小;
  • -N # 为数据空间创建#个inode;
  • -m # 为管理人员预留#(百分比)的空间;
  • -O FEATURE|^FEATURE 启用指定特性(FEATURE)或不启用指定特性( ^FEATURE)

由上述我们可以总结出在某个分区上创建ext3文件系统的四种方法:
法一:
~]# mkfs.ext3 /dev/Device
法二:
~]# mkfs -t ext3 /dev/Device
法三:
~]# mke2fs -t ext3 /dev/Device
法四:
~]# mke2fs -j /dev/Device

示例:
将分区/dev/sdb1的块大小设为1024b,为管理人员预留3%的空间,设卷标为MYDATA,指定为每2048个字节创建一个inode;-

[root@localhost ~]# mke2fs -b 1024 -m 3 -L MYDATA -i 2048 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=MYDATA
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
1048576 inodes, 2097152 blocks
62914 blocks (3.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=69206016
256 block groups
8192 blocks per group, 8192 fragments per group
4096 inodes per group
Superblock backups stored on blocks: 
	8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409, 663553, 
	1024001, 1990657

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

blkid: 块设备属性信息查看;其属性信息包括:卷标、UUID、文件系统类型;


用法
~]# blkid
直接使用查看所有块设备的属性信息;

~]# blkid [option] [/dev/Device]
查看指定块设备的属性信息;

选项

  • -U uuid 根据指定的uuid查找对应设备;
  • -L LABEL 根据指定的卷标来查找对应设备;

示例1:

[root@localhost ~]# blkid 
/dev/sda1: UUID="cc6ed223-ea32-459d-b639-f77e8da35b72" TYPE="xfs" 
/dev/sda2: UUID="a1467dac-9b82-4460-8460-49aaddac6b19" TYPE="swap" 
/dev/sda3: UUID="8c591fb4-4d46-4a67-9ab8-729cf0cec90e" TYPE="xfs" 
/dev/sdb1: LABEL="MYDATA" UUID="3e447824-47c9-4665-942a-c56bbfab6a5d" TYPE="ext2" 

示例2:

[root@localhost ~]# blkid /dev/sdb1
/dev/sdb1: LABEL="MYDATA" UUID="3e447824-47c9-4665-942a-c56bbfab6a5d" TYPE="ext2" 

示例3:

[root@localhost ~]# blkid -L MYDATA
/dev/sdb1
[root@localhost ~]# blkid -U 8c591fb4-4d46-4a67-9ab8-729cf0cec90e
/dev/sda3

e2label 管理ext系列文件系统的卷标信息;


用法
~]# e2label /dev/Device
查看指定设备的卷标;

~]# e2label /dev/Device LABEL
修改指定设备的卷标

示例:

[root@localhost ~]# e2label /dev/sdb1
MYDATA
[root@localhost ~]# e2label /dev/sdb1 JEFFREY
[root@localhost ~]# blkid /dev/sdb1
/dev/sdb1: LABEL="JEFFREY" UUID="3e447824-47c9-4665-942a-c56bbfab6a5d" TYPE="ext2" 

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


用法
~]# tune2fs [option] /dev/Device

选项

  • -l 查看指定文件系统的超级块信息;
  • -L LABEL 修改卷标
  • -m # 修改预留给管理员的空间百分比;
  • -j 将ext2文件系统升级为ext3;
  • -O FEATURE|^FEATURE 启用或禁用文件系统属性;
  • -o 调整文件系统的默认挂载选项;

示例1:
设置分区/dev/sdb1的文件系统拥有日志功能(文件系统相当于升级到ext3)

[root@localhost ~]# tune2fs -O has_journal /dev/sdb1
tune2fs 1.42.9 (28-Dec-2013)
Creating journal inode: done

[root@localhost ~]# blkid /dev/sdb1
/dev/sdb1: LABEL="JEFFREY" UUID="3e447824-47c9-4665-942a-c56bbfab6a5d" SEC_TYPE="ext2" TYPE="ext3" 

[root@localhost ~]# tune2fs -O ^has_journal /dev/sdb1
tune2fs 1.42.9 (28-Dec-2013)

[root@localhost ~]# blkid /dev/sdb1
/dev/sdb1: LABEL="JEFFREY" UUID="3e447824-47c9-4665-942a-c56bbfab6a5d" TYPE="ext2" 

示例2:
启用默认挂载选项acl;然后再次关闭acl默认挂载选项;

[root@localhost ~]# tune2fs -o acl /dev/sdb1
tune2fs 1.42.9 (28-Dec-2013)

[root@localhost ~]# tune2fs -l /dev/sdb1
tune2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   JEFFREY
Last mounted on:          <not available>
Filesystem UUID:          3e447824-47c9-4665-942a-c56bbfab6a5d
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      ext_attr resize_inode dir_index filetype sparse_super
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
……
……

[root@localhost ~]# tune2fs -o ^acl /dev/sdb1
tune2fs 1.42.9 (28-Dec-2013)
[root@localhost ~]# tune2fs -l /dev/sdb1
tune2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   JEFFREY
Last mounted on:          <not available>
Filesystem UUID:          3e447824-47c9-4665-942a-c56bbfab6a5d
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      ext_attr resize_inode dir_index filetype sparse_super
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr
……
……

dumpe2fs 查看超级块信息;


用法
~]# dumpe2fs /dev/Device
直接使用可查看超级块信息,同时显示分区的块组详细信息;

~]# dumpe2fs -h /dev/Device
只查看超级块信息,同tune2fs -l /dev/Device


mkswap 创建交换分区;


用法
~]# mkswap [option] /dev/Device

选项

  • -L LABEL 指定卷标;

注意啦,在创建交换分区时,切记首先把分区ID修改为82(linux swap)。


fsck 文件系统检测,即 filesystem check;


用法

~]# fsck.FS_TYPE /dev/Device

~]# fsck -t FS_TYPE /dev/Device

注意:FS_TYPE必须要与检测分区文件系统类型相同;

选项

  • -a 自动修复错误;
  • -r 交互式修复错误;

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


用法
~]# e2fsck [option] /dev/Device

选项

  • -y 自动回答为yes
  • -f 强制修复

示例:

[root@localhost ~]# e2fsck -f /dev/sdb1
e2fsck 1.42.9 (28-Dec-2013)
/dev/sdb1 is mounted.
e2fsck: Cannot continue, aborting.

我们的优盘若是ntfs文件系统,则linux内核可能无法识别,需使用工具mkfs.vfat将其格式化为vfat(fat32)格式的文件系统;

创建了文件系统则需要进行挂载。有关文件系统的挂载、卸载等内容,会在第二篇文章中介绍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值