第六章 Linux 磁盘管理
第六章 Linux 磁盘管理
1、磁盘分区、格式化、文件系统、文件系统类型、挂载、挂载点 的概念
如果我们想在系统中增加一块硬盘用于数据存取,那么大概需要以下步骤:
1)对该磁盘进行分区(分割)
目的,一是为了分割硬盘空间方便管理,更重要的是让各个分区都基本独立开来,这样如果某个区发生问题,至少不会直接影响到其他分区。
举例:如果把一块磁盘比喻成一大块地,那么对磁盘进行分区就相当于是把地按照需要划分成几块地或者几个区域。划分出来的某块地或者某个区域我们一般称作“某个分区”
2)对某个分区进行格式化
各种操作系统都必须按照一定的方式来管理数据,对分区进行格式化的目的是为了在分区里写入文件系统,这样才能被操作系统使用。
举例:我们把向磁盘里存数据比喻成现实生活中向“银行保管箱”里存物贵重品
地刚刚你已经分好了,可是这个地你能直接用来存物品吗?当然不行,你得在分好的某块地上建好大厦以及在大厦里构建保管柜,这样才能够用于存储物品。
■ 磁盘分区也是同样的道理,要想能够被操作系统用于实际的存储数据,还得在磁盘分区里写入文件系统,也就是所谓的“格式化”,即操作系统需要按照特定的规划去建设开发这个分区,开发好后才能被操作系统用作数据存储。
■ 问一下:向分区写入文件系统,这个文件系统本身会占用磁盘空间吗?
■ 在地上建设大厦和构建保管柜,建设大厦时肯定可以有不同的结构供选择吧?保管柜也有不同的品牌供选择吧?同样的,文件系统也有不同的类型供选择,比如我们 windows 下常见的 NTFS、FAT32 等,它们就是传说中的文件系统类型,而 Linux 下常见的文件系统类型有 EXT*(比如 EXT4)、xfs 等等,具体我们后面讲。
■ 一个分区被格式化(写入文件系统,不管是什么类型的文件系统)后,我们就可以称作它是一个“文件系统”
3)挂载
这个就是把某个文件系统用管子接到某个目录上,对应的目录就称作挂载点,参考第一回!
4)一块硬盘需要经过哪些步骤才可以被我们 Linux 操作系统用来实际的存取数据呢?
分区(分割) -> 对(某个)分区进行格式化(写入文件系统) -> 挂载
所以比较讲究的说法是:我们称呼一个可被挂载的数据为一个文件系统,而不是叫一个分区
请问:第一步 分区(分割) 是必须的吗?一整块磁盘可不可以不进行分区就直接格式化,然后挂载使用
2、查看文件系统使用情况(比如容量空间的使用情况)
df [-ihT] [FILE...]
注:
FILE 可以直接指定文件系统(路径),则会打印出该文件系统的磁盘空间使用情况;
FILE 也可以指定为非文件系统文件的路径则会输出该文件相关的文件系统的磁盘空间使用情况;
选项:
-i:以 inode 数量显示
-h:以较易阅读的单位来显示容量
-T:显示出分区的文件系统格式名称
3、查看目录所占容量(包括其后代文件所占)
du [-ahcs] FILE... 选项:
-h:以较易阅读的单位来显示容量(常用)
-s:只列出总量(常用)
-a:将文件的容量也显示出来,而不是仅仅列
-c:最后列出总量
常用形式:du -sh FILE...
4、列出所有可用块设备的信息(即列出系统上所有存储
lsblk [-dfp] [device]
注:可以看成是 list block device 的缩写,这个命令很重要可以看到系统上块设备的各种情况比如容量这些都是可以查看的!
选项:
-d:仅列出磁盘,而不列出其分区信息
-f:显示文件系统信息,比如类型以及 UUID 等;UUID 是通用唯一识别码,Linux 会将系统内所有的装置都给予一个独一无二的识别码
-p:列出完整路径!而不是仅列出名字
PS:一般我们是直接敲 lsblk 来查看
■ 存储设备名称规范:
■ 物理磁盘:/dev/sd[a-z],比如/dev/sda、/dev/sdb 等等
■ 该磁盘的分区:
/dev/sd[a-z]数字,比如/dev/sda1:表示是/dev/sda 这个磁盘的某个分区,其中数字 1 是分区号。
■ 云服务上磁盘可能为:/dev/vd[a-z]
■ 该磁盘的分区:同理...
■ 所以查看存储设备也可以通过类似这种方法:
ls -l /dev/[sv]d
5、磁盘分区
分区的两种方式: MSDOS (MBR) 分区表方式分区、GPT 分区表(GUID partition table) 方式分区,他们各自有什么特点呢?
1)通过 MSDOS (MBR) 分区表 方式分区
①特点:
■ 主分区+扩展分区 最多 4 个
■ 扩展分区最多只有一个
■ 可以在扩展分区下 划分出多个逻辑分区
■ 不能直接支持 2T 以上磁盘
②有人可能有疑问为什么分区还分什么主分区、扩展分区、逻辑分区这些名词呢?
其实归根到底是因为 MSDOS (MBR) 分区表的分区方式技术上最多只能有四个分区,4 个分区实在是很容易就不够用,怎么办呢?于是牛人就想办法把一个分区作为扩展分区(扩展分区本身不能直接用的),可以在扩展分区的基础上划分出很多个逻辑分区就可以使用了,这样主分区+多个逻辑分区就可以打破只能有 4 个分区的限制。那逻辑分区与主分区在数据存储上是没有区别的,只是名分不同,至于其具体的硬件层面的技术实现细节就不是我
们应该考虑的问题了!
③fdisk [-l] [设备名称]
■ 选项:
-l:输出后面接的设备所有的分区内容。
若后不接具体设备则把能列出来的都列出来
④fdisk 后面如果不加-l 选项,而是接磁盘的名称 则可以对该磁盘进行分区
■ 举例:
fdisk /dev/sdb
根据提示输入 m 可获取帮助:
常用的交互命令:
p:打印出当前磁盘的分区信息
n:新建一个新的分区
w:保存
q:退出
d:删除一个分区
注:这个命令是一个非常容易操作的命令,因为每一步都有提示!
2)GPT 分区表(GUID partition table) 方式分区
通过这个分区表方式来分区就强大了,分区数量没有 4 个限制了,所以就没有什么主分区、扩展分区、逻辑分区这些概念了都是分区没有名分的不同了;也没有 2T 容量的限制!所以比上面 MBR 分区表方式的分区更强大更先进。
警告:其实目前的 fdisk 命令已经开始支持 GPT 分区表方式分区进行分区,不过目前是在实验阶段,不建议生产环境使用。
所以我们最好使用专门的用于 GPT 分区表方式分区的命令:gdisk,这个命令使用上和 fdisk 类似
3)partprobe [-s]
partprobe 更新 Linux 核心的分区表信息,如果分完区结果看不到分区设备信息(虚拟机这边不用),就手动更新下,当然重启系统也可以
选项:
-s:显示摘要和分区
4)parted 命令
parted 支持 MSDOS (MBR) 分区表方式分区 以及 GPT 分区表(GUID partition table) 方式分区进行分区,不过我们上面介绍了 fdisk 与 gdisk 用户体验更好,所以更推 荐你使用 fdisk 或 gdisk 进行分区!parted 命令你如果有兴趣自行查询使用。
■ 查询帮助
①直接敲 parted 进入交互模式(输入之后会等待你输入交互命令)
②输入 help 命令查看这边支持的交互命令
提示:
■ 这边的交互命令也可以通过 tab 进行自动补全,甚至你不敲 help 直接敲两次 tab 试试!
■ 当然直接通过 man parted 的方式也可以查询 parted 的帮助信息
6、格式化(写入文件系统)
1)Linux 下常见的文件系统类型:
■ ext4
第四代扩展文件系统(英语:Fourth extended filesystem,缩写为 ext4)是 Linux 系统下的日志文件系统,是 ext3 文件系统的后继版本。
■ 什么叫日志文件系统?
日志文件系统(英语:Journaling file system)是一种文件系统在发生变化时,先把相关的信息写入一个被称为日志的区域,然后再把变化写入主文件系统的文件系统。 在文件系统发生故障(如内核崩溃或突然停电)时,日志文件系统更容易保持一致性,并且可以较快恢复。
■ 注意:这个日志不是用来修复数据损坏的而是修复文件系统的,你可以理解为他主要修复这种情况:当把物品存入保管箱时,由于突发状况使得银行没有把这个保管箱登记标记为已使用,这时就产生了不一致性(比如实际已使用的保管箱数量与登记系统里记录的不一样)!至于说数据本身的丢失,就不是这个能够恢复的了!
■ xfs
xfs,一种高性能的日志文件系统,也是 CentOS7 上默认的文件系统类型(CentOS6 上默认是 ext4)。
■ 比较
■ 当然文件系统类型有很多,可以通过以下命令查看当前操作系统支持那些文件系统类型:
ls -l /lib/modules/$(uname -r)/kernel/fs
我们知道 ext4 和 xfs 即可
2)格式化操作
■ mkfs.xfs [-L] 设备
选项:
-L:指定文件系统的 Label name,最长可以有 12
其他参数等以后遇到特殊的格式化需求再 man 查询吧!
■ mkfs.ext4 [-L] 设备
■ mkfs [-t 文件系统类型] 设备
这是个综合命令,当我们使用 mkfs -t xfs 时,它内部就会去执行 mkfs.xfs
选型:
-t: 可接系统支持的文件系统类型,例如常见文件系统类型:xfs、ext4 等
3)查看文件系统信息
■ dumpe2fs [-h] 文件系统设备路径
显示 ext2/ext3/ext4 类型的文件系统信息
选项:
-h:只显示 superblock 信息,superblock 里记载了该文件系统的整体信息比如 inode、date block 的总量、剩余量、以及每个 inode 或 date block
的大小、等属性。
■ xfs_info 文件系统设备路径
显示 xfs 类型的文件系统信息
■ blkid 查看文件系统 UUID 等信息
■ 以列表的形式输出文件系统的设备名路径、文件系统类型、lable、挂载点、UUID 信息
■ 查看文件系统的 UUID
blkid 文件系统路径
blkid 可列出各个文件系统的 UUID 、文件系统类型 等参数
blkid -s UUID [文件系统设备路径]
如果不指定文件系统路径,则显示所有文件系统的 UUID
■ 查看文件系统 LABEL:blkid -s LABEL [文件系统设备路径]
如果不指定文件系统路径,则显示所有文件系统的 LABEL
■ 修改文件系统的 LABEL 即卷名称类似于我们 windows 下盘的名字比如 C、D、E 的意思(如果格式化的时候没有设置可以通过这个方法来设置或修改)
■ ext 类的文件系统,修改某个文件系统的卷标 LABEL 可以使用 e2label 或 tune2fs
e2label 设备路径 [新 LABEL]
tune2fs –L 新 LABEL 文件系统设备路径
■ xfs 类的文件系统,修改 LABLE 请使用 xfs_admin
xfs_admin -L 新 LABEL
7、挂载/卸载文件系统
1)使用 mount 进行手动挂载
■ mount [-t 文件系统类型] 文件系统路径 挂载点
选项:
-t :来指定欲挂载的文件系统类型(一般不用加、因为系统会自动分析文件系统类型的)
其他一些选项我们待会再讲
注:强烈不推荐使用文件系统名称(路径)的方式来挂载,因为不可靠(万一哪天硬盘插入服务器接口的顺序改变了那么名称就变了)!
■ mount [-t 文件系统类型] UUID=‘’ 挂载点
通过文件系统名字挂载并不可靠,所以最好使用文件系统的 UUID 号来挂载!
■ mount [-t 文件系统类型] LABEL=‘’ 挂载点
也可以通过 文件系统的 LABEL 名来挂载
■ mount -o 后面接挂载时设定的参数
未完待续