文件系统 挂载
1 概述
本文通过对讲解了磁盘的基本概念,分区,创建文件系统,挂载,卸载等步骤进行讲解。使得用户能够创建基本的磁盘并挂载使用空间。
2 磁盘基本概念
2.1 磁盘空间
每个扇区大小是 512byte,这是磁盘的最小单位
每一个磁道上有多少个扇区就是扇区数 sectors
每一圈叫做磁道(track),最外面的叫做 0 磁道
依次往里增加,最里面的磁道数最大
每个盘有两个面,都有两个磁头(head)读取数据
相同的磁道组成的叫做柱面(cylinder),同样最外面叫 0 柱面,最里面柱面数最大
因此,
每个盘面的存储空间:512*sectors*tracks
每个柱面的空间:512*sectors*heads
每个硬盘的空间是:512*sectors*tracks*heads
扇区数是由 6bit 来决定,所以每个磁道最大有 2^6 就 64 个扇区
磁道的数量是由 10bit 来决定磁道的数量,所以磁道最多是 2^10=1024 个
盘面的数量是由 8bit 决定的,所以每个硬盘最大有 2^8=256 个磁头
所以早期每个柱面的大小为 512byte*64*256/1024/1024=8M.
CentOS6 或者之前的版本默认柱面是划分分区的基本单位是 8M,centOS7 默认用扇区为单位分区。
但是,早期每个磁盘的最大空间就是 1024*8M/1024=8G. 现在的磁盘为了解决这个问题,就采用了区位记录磁盘扇区结构(ZBRzoned bit recording)来定义磁盘的空间,磁盘大小因此得到了扩展。
扇区图片
2.2 磁盘寻址方式
分为 CHS 和 LBA 两种
CHS
采用 24bit 位寻址
其中前 10 位表示 cylinder,中间 8 位表示 head,后面 6 位表示 sector。
最大寻址空间 8GB
LBA(logical block addressing)
LBA 是一个整数,通过转换成 CHS 格式完成磁盘具体寻址
LBA 采用 48 个 bit 位寻址
最大寻址空间 128PB
由于 CHS 寻址方式的寻址空间在大概 8GB 以内,所以在磁盘容量小于大概 8GB 时,可以使用 CHS 寻址方式或是 LBA 寻址方式;在磁盘容量大于大概 8GB 时,则只能使用 LBA 寻址方式
2.3 分区的概念
2.3.1 分区的原因
优化 I/O 性能
实现磁盘空间配额限制
提高修复速度
隔离系统和程序
安装多个 OS
采用不同文件系统
2.3.2 使用分区空间
设备识别
设备分区
创建文件系统
标记文件系统
在 / etc/fstab 文件中创建条目
挂载新的文件系统
2.3.3 管理分区
两种分区方式:MBR,GPT
分区相当于是把一块大硬盘分成几个小房间。MBR 是比较旧的分区方式,只能分区较小的空间已经分区的数量也会比较少,GPT 则是克服了 MBR 的缺点。
MBR 和 GPT 引导系统启动的方式不一样
BIOS 和 UEFI 引导系统启动流程
BIOS+MBR 引导计算机进行启动,BIOS 写入到 ROM 里面,当计算机启动时,BIOS 就会去读取 MBR 分区。通过 BIOS 配合 MBR 引导启动分区
但是 BIOS 并跟 GPT 搭配。如果一定要用,可以通过 (BIOS+MBR)sda 系统盘,引导系统启动 + GPT(其他盘)分区的方式来进行分区。
默认情况下 UEFI+GPT 进行系统的启动
2.3.3.1 MBR 分区概念
MBR: Master Boot Record,1982 年,使用 32 位表示扇区数,分区不超过 2T
如何分区:按柱面
0 磁道 0 扇区:512bytes
446bytes: boot loader
64bytes:分区表
16bytes: 标识一个分区
2bytes: 55AA
4 个主分区;3 主分区 + 1 扩展 (N 个逻辑分区)
MBR 分区结构图
硬盘主引导记录 MBR 由 4 个部分组成
主引导程序(偏移地址 0000H--0088H),它负责从活动分区中装载,并运行系统引导程序。
出错信息数据区,偏移地址 0089H--00E1H 为出错信息,00E2H--01BDH 全为 0 字节。
分区表(DPT,Disk Partition Table)含 4 个分区项,偏移地址 01BEH--01FDH, 每个分区表项长 16 个字节,共 64 字节为分区项 1、分区项 2、分区项 3、分区项 4
结束标志字,偏移地址 01FE--01FF 的 2 个字节值为结束标志 55AA
2.3.3.2 GPT 分区
GPT:GUID(Globals Unique Identifiers)partition table 支持 128 个分区,使用 64 位,支持 8Z(512Byte/block )64Z (4096Byte/block)
使用 128 位 UUID(Universally Unique Identifier) 表示磁盘和分区 GPT 分区表自动备份在头和尾两份,并有 CRC 校验位
UEFI (统一扩展固件接口) 硬件支持 GPT,使操作系统启动
GPT 分区结构
GPT 的第一个 0 扇区是保护 MBR,一样是 512byte,但是这个 MBR 不是用来启动引导盘的。只是保护的目的,因为传统的操作系统都是支持 MBR,并不支持 GPT。保护 MBR 是当旧的电脑系统系统不识别 GPT 分区的时候,即认不出 GPT 格式的硬盘有数据的时候,会识别出该硬盘上有个 MBR 分区,最起码是不会让管理者误认为没有操作系统或者分区,直接对该硬盘进行格式化。
GPT 格式做的可以分 128 个分区。GPT 分区表有自动备份的功能,支持更大的分区
2.3.4 格式化分区
给硬盘分区后,还要讲对应的硬盘进行格式化,指定文件系统类型,是指定了对应分区上文件管理的方式, 相当于有软件来管理这个文件了。
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统
从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等
查前支持的文件系统:
- cat / proc / filesystems
查看当前系统支持的文件系统,可以进入 fs 目录下查看,语句如下
- cd / lib / modules / `uname - r` / kernel / fs
文件系统类型主要有以下几种
Linux 文件系统:ext2(Extended file system), ext3, ext4, xfs(SGI), btrfs(Oracle), reiserfs, jfs(AIX), swap
光盘:iso9660
Windows:FAT32, exFAT,NTFS
Unix: FFS(fast), UFS(unix), JFS2
网络文件系统:NFS, CIFS
集群文件系统:GFS2, OCFS2(oracle)
分布式文件系统:fastdfs,ceph, moosefs, mogilefs, glusterfs, Lustre
RAW:未经处理或者未经格式化产生的文件系统
根据其是否支持 "journal" 功能:
日志型文件系统: ext3, ext4, xfs, ...
非日志型文件系统: ext2, vfat
文件系统的组成部分:
内核中的模块:ext4, xfs, vfat
用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat
Linux 的虚拟文件系统:VFS
当然,在文件系统中也是运行没有文件系统的硬盘存在。
如果没有分区,没有文件系统,叫 RAW,裸文件系统
如果没有文件系统,要读数据,可以用 hexdump–C –n 512 /dev/sdb1 这样来读取。
没有文件系统的话,相当于把数据之间放在磁盘上了,读取速度回比较快,如 oracle 数据库就会把数据放在裸文件系统里。
3 创建分区
以下三个工具可以创建分区。
fdisk 创建 MBR 分区,
gdisk 创建 GPT 分区
parted 高级分区操作
3.1 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 //数字1,移除掉对应的分区
- parted -l //字母l,显示分区内容
注意
- parted / dev / sdb mklabel gpt
如果用 parted 指定了硬盘 lab 为 gpt 分区,则用 fdisk 命令也可以创建出 gpt 格式的分区,但是不建议这么用
- parted / dev / sdc mklabel msdos
如果用 parted 指定了硬盘 lab 为 mbr 分区,则用 gdisk 分区的时候,会提示将 MBR 转换为 GPT 分区,这个和指定成 GPT 不一样。
3.2 fdisk 分区
gfisk /dev/sdb 类 fdisk 的 GPT 分区工具,这里就仅介绍 fdisk
fdisk -l [-u] [device...] 查看分区
fdisk /dev/sdb 管理分区
子命令:
p 分区列表
t 更改分区类型,centOS 6 和 centOS 7 相同类型的 code 不一样。
n 创建新分区
d 删除分区
v 校验分区
u 转换单位
w 保存并退出
q 不保存并退出
当分区后,新的分区不会马上同步,需要用 partprobe 或者 partx 进行同步,原理是通知内核重新读取硬盘分区表,重新设置内存中的内核分区表版本
partprobe- 用于 centOS5 和 centOS7 上
partx - 用于 centOS6 上
同步新增加的分区,命令
- partx –a /dev/sda //表示通过新增加硬盘的分区表。如果盘里面已经同步的分区,则表示该分区忙碌。
如果是同步删除的分区,用命令
- partx -d -nr 6-8 /dev/sda//则要指定删除分区的那个具体数字。
命令 lsblk 可以列出块设备
查看内核是否已经识别新的分区,命令如下
- cat / proc / partitions
4 创建文件系统
创建文件系统,就是要将分好的分区进行格式化,指定对应的文件系统
4.1 mkfs 命令
(1) mkfs.FS_TYPE /dev/DEVICE ,其中 FS_TYPE 可以指定为 ext3,ext4,xfs,vfat 等
(2) mkfs -t FS_TYPE /dev/DEVICE
(3) mkfs -L 'LABEL' /dev/DEVICE: 设定卷标
4.2 mke2fs 命令
mke2fs:ext 系列文件系统专用管理工具,专门用来格式化 ext 文件系统格式的工具
-t {ext2|ext3|ext4}
-b {1024|2048|4096}
-L 'LABEL'
-j: 相当于 - t ext3
mkfs.ext3 = mkfs-t ext3 = mke2fs -j = mke2fs -t ext3
-i#: 为数据空间中每多少个字节创建一个 inode;此大小不应该小于 block 的大小
-N #:指定分区中创建多少个 inode
-I 一个 inode 记录占用的磁盘空间大小,128---4096
-m #: 默认 5%, 为管理人员预留空间占总空间的百分比
-O FEATURE[,...]:启用指定特性
-O ^FEATURE:关闭指定特性
4.3 文件系统标签
指向设备的另一种方法
与设备无关
blkid:块设备属性信息查看
blkid[OPTION]... [DEVICE]
-U UUID: 根据指定的 UUID 来查找对应的设备
如果硬盘不重新格式化,则 UUID 不会变,且是唯一,因为磁盘的命名或者标签可能会改变,所以,挂载建议用设备的 UUID 进行挂载
-L LABEL:根据指定的 LABEL 来查找对应的设备
e2label:管理 ext 系列文件系统的 LABEL
e2label DEVICE [LABEL]
findfs:查找分区
findfs[options] LABEL=<label>
findfs[options] UUID=<uuid>
4.4 调整 ext 文件系统参数值
tune2fs:重新设定 ext 系列文件系统可调整参数的值
-l:查看指定文件系统超级块信息;super block
-L 'LABEL':修改卷标
-m #:修预留给管理员的空间百分比
-j: 将 ext2 升级为 ext3
-O: 文件系统属性启用或禁用,–O ^has_journal
-o: 调整文件系统的默认挂载选项,–o ^acl
-U UUID: 修改 UUID 号
4.5 查看 ext 文件系统信息
命令:dumpe2fs
块分组管理,32768 块
-h:查看超级块信息,不显示分组信息
4.6 文件系统检测和修复
常发生于死机或者非正常关机之后
挂载为文件系统标记为 "no clean",注意,如果文件系统是 ext2, 则可能会显示 no clean, 但是没挂载的时候用 dumpe2fs 检查又是 clean 状态
注意:一定不要在挂载状态下修复
fsck 检查文件系统的状态。可以修复故障的文件系统,取消挂载后才能执行该命令,否则可能会破坏文件系统。该命令慎用,非必要时候不要执行。
fsck -f /dev/sdb5 多了 - f 选项,强制检查硬盘,如果没有 - f,大致检查。只能修复文件系统,如果数据已经被破坏了,被覆盖掉的数据就不能修复了,还没被破坏的数据可以继续查看
因异常导致的丢失的文件可以到 lost+found 文件夹下查找
fsck: File System Check
fsck.FS_TYPE
fsck-t FS_TYPE
-p: 自动修复错误
-r: 交互式修复错误
FS_TYPE 一定要与分区上已经文件类型相同
e2fsck:ext 系列文件专用的检测修复工具
-y:自动回答为 yes
-f:强制修复
5 挂载
5.1 mount 挂载
挂载: 将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为
卸载: 为解除此关联关系的过程
把设备关联挂载点:mount Point
卸载时:可使用设备,也可以使用挂载点
挂载点下原有文件在挂载完成后会被临时隐藏
挂载点目录一般为空
挂载方法:mount DEVICE MOUNT_POINT
mount:通过查看 / etc/mtab 文件显示当前已挂载的所有设备
mount [-fnrsvw] [-t vfstype] [-o options] device dir
device:指明要挂载的设备;
(1) 设备文件:例如 / dev/sda5
(2) 卷标:-L 'LABEL', 例如 - L 'MYDATA'
(3) UUID, -U 'UUID':例如 - U '0c50523c-43f1-45e7-85c0-a126711d406e'
(4) 伪文件系统名称:proc, sysfs, devtmpfs, configfs
dir:挂载点
事先存在;建议使用空目录
进程正在使用中的设备无法被卸载
mount 常用命令选项
-t vsftype:指定要挂载的设备上的文件系统类型
-r: readonly,只读挂载
-w: read and write, 读写挂载
-n: 不更新 / etc/mtab,mount 不可见
-a:自动挂载所有支持自动挂载的设备 (定义在了 / etc/fstab 文件中,且挂载选项中有 auto 功能)
-L 'LABEL': 以卷标指定挂载设备
-U 'UUID': 以 UUID 指定要挂载的设备
-B, --bind: 绑定目录到另一个目录上
-o options:(挂载文件系统的选项),多个选项使用逗号分隔
async:异步模式
sync:同步模式, 内存更改时,同时写磁盘
atime/noatime:包含目录和文件
diratime/nodiratime:目录的访问时间戳
auto/noauto:是否支持自动挂载, 是否支持 - a 选项
exec/noexec:是否支持将文件系统上运行应用程序
dev/nodev:是否支持在此文件系统上使用设备文件
suid/nosuid:不否支持 suid 和 sgid 权限
remount:重新挂载
ro:只读
rw:读写
user/nouser:是否允许普通用户挂载此设备,/etc/fstab 使用
acl:启用此文件系统上的 acl 功能
loop: 使用 loop 设备
defaults:图形界面自动挂载相当于 rw, nosuid, dev, exec, auto, nouser,async
defaults:但是通过 mount 分区挂载默认是相当于 rw, suid, dev, exec, auto, nouser, async
查看内核追踪到的已挂载的所有设备
- cat / proc / mounts
5.2 写入配置命令
要使得挂载长期有效,即开机时自动挂载,需要往配置文件 / etc/fstab 写入相关的信息
配置文件系统体系
被 mount、fsck 和其它程序使用
系统重启时保留文件系统体系
可以在设备栏使用文件系统卷标
使用 mount -a 命令挂载 / etc/fstab 中的所有文件系统
/etc/fstab 每行定义一个要挂载的文件系统,里面每个字段的含义如下:
要挂载的设备或伪文件系统
设备文件
LABEL:LABEL=""
UUID:UUID=""
伪文件系统名称:proc, sysfs
挂载点
文件系统类型,相关文件系统类型可见 2.3.4 节内容
挂载选项:defaults
转储频率:0:不做备份 1:每天转储 2:每隔一天转储
自检次序:0:不自检
1:首先自检;一般只有 rootfs 才用 1
自检次序字段 如果有分区填写大于 1 的话,则在检查完根分区后,接着按填写的数字从小到大依次检查下去。同数字 的同时检查。比如第一和第二个分区填写 2,第三和第四个分区填写 3,则系统在检查完根分区后,接着同时检查第一和第二个分区,然后再同时检查第三和第四个分区。
特殊文件挂载举例
其中,可以用 showmount –e ip 可以看到对应 ip 上的共享文件夹,然后再将其挂载上 nfs 文件格式上
6 卸载
一般情况下,正在被访问的挂载设备是不能被正常卸载,所以卸载前可以先用以下命名查看情况后在进行卸载
查看挂载情况,可以检查挂载是否成功
findmnt MOUNT_POINT|device
查看正在访问指定文件系统的进程
lsof MOUNT_POINT
fuser -v MOUNT_POINT
终止所有在正访问指定的文件系统的进程
fuser -km MOUNT_POINT
卸载
umountDEVICE
umountMOUNT_POINT
到这里为止,普通分区的使用已经完成,可以正常使用新的分区
来源: http://www.bubuko.com/infodetail-2262699.html