磁盘分区与挂载
(整理自《鸟哥的Linux私房菜》基础篇)
1.观察磁盘分区的状态
1.1lsblk列出系统上的所有磁盘列表
lsblk可以看成list block device的简称,就是列出所有存储设备的意思。
我们来谈谈默认输出的信息有哪些:
• NAME:就是装置的文件名啰!会省略 /dev 等前导目录
• MAJ:MIN:其实核心认识的装置都是透过这两个代码来熟悉的!分别是主要:次要装置代码
• RM:是否为可卸除装置 (removable device),如光盘、USB 磁盘等等
• SIZE:容量
• RO:是否为只读装置
• TYPE:是磁盘 (disk)、分区槽 (partition) 还是只读存储器 (rom) 等输出
• MOUTPOINT:挂载点
1.2 blkid 列出装置的 UUID 等参数
虽然 lsblk 已经可以使用 -f 来列出文件系统与装置的 UUID 数据,不过,直接使用 blkid 也可以来找出装置的 UUID。
1.3 parted 列出磁盘的分区表类型与分区信息(此命令也可以进行分区)
2.磁盘分区: gdisk/fdisk
MBR 分区表请使用 fdisk 分区, GPT 分区表请使用 gdisk 分区。
这两个工具软件的操作很类似,执行了该软件后,可以通过该软件内部的说明数据来操作。
下面先以GPT的gdisk为例:
你应该要通过 lsblk 或 blkid 先找到磁盘,再用 parted /dev/xxx print 来找出内部的分区表类型,之后才用 gdisk 或 fdisk 来操作系统。 上表中可以发现 gdisk 会扫描 MBR 与 GPT 分区表,不过这个软件还是单纯使用在 GPT 分区表比较好。
只要离开 gdisk 时按下『q』,那么所有的动作『都不会生效!』相反的, 按下『w』就是动作生效。
使用『 p 』可以列出目前这颗磁盘的分区表信息,这个信息的上半部在显示整体磁盘的状态。 图中磁盘共有 40GB 左右的容量,共有 83886080 个扇区,每个扇区的容量为512bytes。 要注意的是,现在的分区主要是以扇区为最小的单位。下半部的分区表信息主要在列出每个分区槽的个别信息项目。每个项目的意义为:
• Number:分区槽编号,1 号指的是 /dev/vda1 这样计算。
• Start (sector):每一个分区槽的开始扇区号码位置
• End (sector):每一个分区的结束扇区号码位置,与 start 之间可以算出分区槽的总容量
• Size:分区槽的容量
• Code:在分区槽内的可能的文件系统类型。Linux 为 8300,swap 为 8200。不过这个项目只是一个提示而已,不见得真的代表此分区槽内的文件系统
• Name:文件系统的名称等等。
用 gdisk 新增分区槽
假设我需要有如下的分区需求:
• 1GB 的 xfs 文件系统 (Linux)
• 1GB 的 vfat 文件系统 (Windows)
• 0.5GB 的 swap (Linux swap)
重点在『 Last sector 』那一行,那行绝对不要使用默认值!因为默认值会将所有的容量用光!因此它默认选择最大的扇区号码! 因为我们仅要 1GB 而已,所以你得要加上 +1G 这样即可!不需要计算 sector 的数量,gdisk 会根据你填写的数值, 直接计算出最接近该容量的扇区数!每次新增完毕后,请立即『 p 』查看一下结果喔!请继续处理后续的两个分区槽! 最终出现的画面会有点像底下这样才对:
那么就直接写入磁盘分区表:
因为 Linux 此时还在使用这颗磁盘,为了担心系统出问题,所以分区表并没有被更新!这个时候我们有两个方式可以来处理,其中一个是重新启动,另外一种则是通过 partprobe 这个指令来处理即可
3.磁盘格式化(创建文件系统)
3.1XFS文件系统mkfs.xfs
3.2 EXT4 文件系统 mkfs.ext4
3.3 其他文件系统 mkfs
4.文件系统检验
4.1 xfs_repair 处理 XFS 文件系统
xfs_repair 可以检查/修复文件系统,不过,因为修复文件系统是个很庞大的任务!因此,修复时该文件系统不能被挂载! 所以,检查与修复 /dev/vda4 没啥问题,但是修复 /dev/centos/home 这个已经挂载的文件系统时,若可以卸除,卸除后再处理即可。
4.2 fsck.ext4 处理 EXT4 文件系统
无论是 xfs_repair 或 fsck.ext4,这都是用来检查与修正文件系统错误的指令。注意:通常只有身为 root 且你的文件系统有问题的时候才使用这个指令,否则在正常状况下使用此一指令, 可能会造成对系统的危害。
执行 xfs_repair/fsck.ext4 时, 被检查的 partition 务必不可挂载到系统上!亦即是需要在卸除的状态。
5.文件系统挂载与卸载
要进行挂载前,你最好先确定几件事:
• 单一文件系统不应该被重复挂载在不同的挂载点(目录)中;
• 单一目录不应该重复挂载多个文件系统;
• 要作为挂载点的目录,理论上应该都是空目录才是。
那么挂载了文件系统之后,原目录下的东西就会暂时的消失,这只是暂时的,等卸载了之后又会出来。
挂载——mount命令
卸载——umount命令
6 磁盘/文件系统参数修订
你可能要修改 Label name , 或者是 journal 的参数,或者是其他磁盘/文件系统运作时的相关参数,使用mknod命令。
7.设置开机挂载
直接到 /etc/fstab 里面去修改。
但是系统挂载的一些限制:
• 根目录 / 是必须挂载的﹐而且一定要先于其它 mount point 被挂载进来。
• 其它 mount point 必须为已建立的目录﹐可任意指定﹐但一定要遵守必须的系统目录架构原则 (FHS)
• 所有 mount point 在同一时间之内﹐只能挂载一次。
• 所有 partition 在同一时间之内﹐只能挂载一次。
• 如若进行卸除﹐您必须先将工作目录移到 mount point(及其子目录) 之外。
这个文件的内容共有六个字段, 各个字段的总结数据与详细数据如下:
[装置/UUID等] [挂载点] [文件系统] [文件系统参数] [dump] [fsck]
o 第一栏:磁盘装置文件名/UUID/LABEL name:
这个字段可以填写的数据主要有三个项目:
§ 文件系统或磁盘的装置文件名,如 /dev/vda2 等
§ 文件系统的 UUID 名称,如 UUID=xxx
§ 文件系统的 LABEL 名称,例如 LABEL=xxx
这三个任意一个都可以。
o 第二栏:挂载点 (mount point)::
就是挂载点啊,一定是目录。
o 第三栏:磁盘分区槽的文件系统:
在手动挂载时可以让系统自动测试挂载,但在这个文件当中我们必须要手动写入文件系统才行!包括 xfs, ext4, vfat, reiserfs, nfs 等等。
o 第四栏:文件系统参数:
这里我们利用表格的方式再汇整一下参数:
参数 | 内容意义 |
async/sync 异步/同步 | 设定磁盘是否以异步方式运作!预设为 async(效能较佳) |
auto/noauto 自动/非自动 | 当下达 mount -a 时,此文件系统是否会被主动测试挂载。预设为 auto。 |
rw/ro 可擦写/只读 | 让该分区槽以可擦写或者是只读的型态挂载上来,如果你想要分享的数据是不给用户随意变更的, 这里也能够设定为只读。则不论在此文件系统的文件是否设定 w 权限,都无法写入喔! |
exec/noexec 可执行/不可执行 | 限制在此文件系统内是否可以进行『执行』的工作?如果是纯粹用来储存数据的目录, 那么可以设定为 noexec 会比较安全。不过,这个参数也不能随便使用,因为你不知道该目录下是否默认会有执行档。 举例来说,如果你将 noexec 设定在 /var ,当某些软件将一些执行文件放置于 /var 下时,那就会产生很大的问题喔! 因此,建议这个 noexec 最多仅设定于你自定义或分享的一般数据目录。 |
user/nouser 允许/不允许使用者挂载 | 是否允许用户使用 mount 指令来挂载呢?一般而言,我们当然不希望一般身份的 user 能使用 mount 啰,因为太不安全了,因此这里应该要设定为 nouser 啰! |
suid/nosuid 具有/不具有 suid 权限 | 该文件系统是否允许 SUID 的存在?如果不是执行文件放置目录,也可以设定为 nosuid 来取消这个功能! |
defaults | 同时具有 rw, suid, dev, exec, auto, nouser, async 等参数。 基本上,预设情况使用 defaults 设定即可! |
o 第五栏:能否被 dump 备份指令作用:
dump 是一个用来做为备份的指令,不过现在有太多的备份方案了,所以这个项目可以不要理会,可以直接输入 0
o 第六栏:是否以 fsck 检验扇区:
早期开机的流程中,会有一段时间去检验本机的文件系统,看看文件系统是否完整 (clean)。 不过这个方式使用的主要是透过 fsck 去做的,我们现在用的 xfs 文件系统就没有办法适用,因为 xfs 会自己进行检验,不需要额外进行这个动作,所以可以直接填 0 。