侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

Linux学习-磁盘的分区、格式化、检验与挂载

2023-10-02 星期一 / 0 评论 / 0 点赞 / 55 阅读 / 36099 字

如果想要在系统新增一颗磁盘时,哪些动作需要做的:对磁盘进行分区,以创建可用的partition;对该partition进行格式化(format),以创建系统可用的filesystem;若想要仔细一点,

如果想要在系统新增一颗磁盘时,哪些动作需要做的:

  1. 对磁盘进行分区,以创建可用的partition;
  2. 对该partition进行格式化(format),以创建系统可用的filesystem;
  3. 若想要仔细一点,则可对刚刚创建好的filesystem进行检验;
  4. 在Linux系统上,需要创建挂载点(亦即是目录),并将它挂载上来;

###观察磁盘分区状态

由于目前磁盘分区主要有MBR以及GPT两种格式,这两种格式所使用的分区工具不太一样,自然就要去找一下目前系统有的磁盘有哪些,这些磁盘是MBR还是GPT等等,这样才能处理

  • lsblk列出系统上的所有磁盘列表lsblk可以看成"list block device"的缩写,就是列出所有存储设备的意思。

  • blkid列出设备的UUID等参数

虽然lsblk已经可以使用-f来列出文件系统与设备的UUID数据,但是还可以用blkid来找出设备的UUID,什么是UUID?UUID是全域单一识别码(universally unique identifer),Linux会将系统内所有的设备都给予一个独一无二的识别码,这个识别码就可以拿来作为挂载或者是使用这个设备/文件系统之用了。

[root@study ~]# blkid/dev/vda2: UUID="94ac5f77-cb8a-495e-a65b-2ef7442b837c" TYPE="xfs"/dev/vda3: UUID="WStYq1-P93d-oShM-JNe3-KeDl-bBf6-RSmfae" TYPE="LVM2_member"/dev/sda1: UUID="35BC-6D6B" TYPE="vfat"/dev/mapper/centos-root: UUID="299bdc5b-de6d-486a-a0d2-375402aaab27" TYPE="xfs"/dev/mapper/centos-swap: UUID="905dc471-6c10-4108-b376-a802edbd862d" TYPE="swap"/dev/mapper/centos-home: UUID="29979bf1-4a28-48e0-be4a-66329bf727d9" TYPE="xfs"

如上所示,每一行代表一个文件系统,主要列出设备名称、UUID名称以及文件系统的类型(TYPE)。

  • parted列出磁盘的分区表类型与分区信息

虽然我们已经知道了系统上面的所有设备,并且通过blkid也知道了所有的文件系统,不过,还是不清楚磁盘的分区类型。这时我们可以通过简单的parted来输出。

[root@study ~]# parted device_name print范例一:列出 /dev/vda 磁盘的相关数据 [root@study ~]# parted /dev/vda print Model: Virtio Block Device (virtblk) # 磁盘的模块名称(厂商) Disk /dev/vda: 42.9GB # 磁盘的总容量 Sector size (logical/physical): 512B/512B # 磁盘的每个逻辑/物理扇区容量 Partition Table: gpt # 分区表的格式 (MBR/GPT) Disk Flags: pmbr_boot Number Start End Size File system Name Flags # 下面才是分区数据 1      1049kB  3146kB  2097kB                     bios_grub 2      3146kB  1077MB  1074MB  xfs 3      1077MB  33.3GB  32.2GB                     lvm

###磁盘分区 : gdisk/fdisk

要注意:MBR分区请使用fdisk分区,GPT分区请使用gdisk分区,

  • gdisk
[root@study ~]# gdisk 设备名称范例:由前一小节的 lsblk 输出,我们知道系统有个 /dev/vda,请观察该磁盘的分区与相关数据 [root@study ~]# gdisk /dev/vda <==仔细看,不要加上数字喔! GPT fdisk (gdisk) version 0.8.6Partition table scan: MBR: protective BSD: not present APM: not present GPT: present Found valid GPT with protective MBR; using GPT. <==找到了 GPT 的分区表!Command (? for help): <==这里可以让你输入指令动作,可以按问号 (?) 来查看可用指令Command (? for help): ?b       back up GPT data to a filec       change a partition's named       delete a partition # 删除一个分区i        show detailed information on a partitionl        list known partition typesn       add a new partition # 增加一个分区o       create a new empty GUID partition table (GPT)p       print the partition table # 印出分区表 (常用)q       quit without saving changes # 不储存分区就直接离开 gdiskr        recovery and transformation options (experts only)s       sort partitionst       change a partition's type codev       verify diskw      write table to disk and exit # 储存分区操作后离开 gdiskx       extra functionality (experts only)?       print this menuCommand (? for help):

首先你应该要通过lsblk或blkid先找到磁盘。再用 parted /dev/xxx print 来找出内部的分区表类型,之后才用gdisk或fdisk来操作系统。上表中可以发现gdisk会扫描MBR与GPT分区表,不过这个软件还是单纯使用在GPT分区表比较好。

不管进行来什么动作,只要离开gdisk时按下"q"那么所有的动作都不会生效。相反的,按下w就是动作生效的意思,所以,可以随意改动gdisk,只要在离开时按下的是q即可,先看看分区表的信息。

command (? for help): p <== 这里可以输出目前磁盘的状态Disk /dev/vda: 83886080 sectors, 40.0 GiB     # 磁盘文件名/扇区数与总容量Logical sector size: 512 Bytes     # 单一扇区大小为 512 BytesDisk identifier (GUID): A4C3C813-62AF-4BFE-BAC9-112EBD87A483     # 磁盘的 GPT 识别码Partition table holds up to 128 entriesFirst usable sector is 34, last usable sector is 83886046Partitions will be aligned on 2048-sector boundariesTotal free space is 18862013 sectors (9.0 GiB)Number Start (sector) End (sector) Size Code Name # 下面为完整的分区信息了! 1             2048 6143 2.0 MiB EF02 # 第一个分区数据 2            6144         2103295   1024.0 MiB  0700 3         2103296        65026047   30.0 GiB    8E00 # 分区编号 开始扇区号码 结束扇区号码 容量大小 Command (? for help): q # 想要不储存离开吗?按下 q 就对了!不要随便按 w 啊!

使用p可以列出目前这颗磁盘的分区表信息,这个信息的上半部在显示整体磁盘的状态。要注意的是,现在的分区主要是以扇区为最小的单位。

下半部的分区表信息主要在列出每个分区的个别信息项目。每个项目的意义为:

  • Number : 分区编号,1号指的是/dev/vda1这样计算
  • Start(setor) : 每一个分区的开始扇区号码位置
  • End(sector) : 每一个分区的结束扇区号码位置,与start之间可以算出分区的总容量
  • Size : 就是分区的容量了
  • Code : 在分区内的可能的文件系统类型。Linux为8300,swap为8200。不过这个项目只是一个提示而已,不见得代表此分区的文件系统。
  • Name : 文件系统的名称等等。

只有root才能执行gdisk。此外,使用的设备文件吗请不要加上数字,因为partition是针对整个磁盘设备而不是某个partition。

  • 用gdisk新增分区

加入我需要有如下的分区需求:

  • 1GB的xfs系统(Linux)
  • 1GB的vfat文件系统(Windows)
  • 0.5GB的swap(Linux swap)

那就来处理。

[root@study ~]# gdisk /dev/vad Number Start (sector) End (sector) Size Code Name 1            2048            6143   2.0 MiB     EF02 2            6144         2103295   1024.0 MiB  0700 3         2103296        65026047   30.0 GiB    8E00 # 找出最后一个 sector 的号码是很重要的! Command (? for help): ? # 查一下增加分区的指令为何Command (? for help): n # 就是这个!所以开始新增的行为!Partition number (4-128, default 4): 4 # 默认就是 4 号,所以也能 enter 即可!First sector (34-83886046, default = 65026048) or {+-}size{KMGTP}: 65026048 # 也能 enterLast sector (65026048-83886046, default = 83886046) or {+-}size{KMGTP}: +1G # 决不要 enter# 这个地方可有趣了!我们不需要自己去计算扇区号码,通过 +容量 的这个方式,# 就可以让 gdisk 主动去帮你算出最接近你需要的容量的扇区号码喔!Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): # 使用默认值即可~直接 enter 下去! # 这里在让你选择未来这个分区预计使用的文件系统!默认都是 Linux 文件系统的 8300  ! Command (? for help): p Number Start (sector) End (sector) Size Code Name 1            2048            6143   2.0 MiB     EF02 2            6144         2103295   1024.0 MiB  0700 3         2103296        65026047   30.0 GiB    8E00 4        65026048        67123199   1024.0 MiB  8300  Linux filesystem

重点在Last sector那一行,那行绝对不要使用默认值,因为默认值会将所有的容量用光。因此它默认选择最大的扇区号码。因为我们仅要1GB而已,所以你要加上+1G这样即可,不需要计算sector的数据,gdisk会根据你填写的数值,直接计算出最接近该容量的扇区数。每次新增完毕后,请立即p查看一下结果。最终出现的画面会有点像下面。

Command (? for help) : pNumber Start (sector) End (sector) Size Code Name 1            2048            6143   2.0 MiB     EF02 2            6144         2103295   1024.0 MiB  0700 3         2103296        65026047   30.0 GiB    8E00 4        65026048        67123199   1024.0 MiB  8300  Linux filesystem 5        67123200        69220351   1024.0 MiB  0700  Microsoft basic data6        69220352        70244351   500.0 MiB   8200  Linux swap

比较有趣的是文件系统的ID。Linux大概都是8200/8300/8e00等三种格式,Windows几乎都是0700,如果忘记这些数字,可以在gdisk内按下:"L"来显示。如果一切的分区状态都正常的话,那么就直接写入磁盘分区表。

 Command (? for help): w Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!! Do you want to proceed? (Y/N): y OK; writing new GUID partition table (GPT) to /dev/vda. Warning: The kernel is still using the old partition table. The new table will be used at the next reboot. The operation has completed successfully. # gdisk 会先警告你可能的问题,我们确定分区是对的,这时才按下 y !不过怎么还有警告? # 这是因为这颗磁盘目前正在使用当中,因此系统无法立即载入新的分区表~ [root@study ~]# cat /proc/partitions major minor  #blocks  name 252        0   41943040 vda 252        1       2048 vda1 252        2    1048576 vda2 252        3   31461376 vda3 253        0   10485760 dm-0 253        1    1048576 dm-1 253        2    5242880 dm-2 # 你可以发现,并没有 vda4, vda5, vda6 喔!因为核心还没有更新!

因为Linux此时还在使用这颗磁盘。为了担心系统出问题,所以分区表并没有被更新,这个时候我们有两个方式来处理,其中一个是重新开机,另外一个则是通过partprobe这个指令来处理即可。

  • partprobe更新Linux核心的分区信息
[root@study ~]# partprobe [-s] # 你可以不要加 -s !那么屏幕不会出现讯息! [root@study ~]# partprobe -s # 不过还是建议加上 -s 比较清晰!/dev/vda: gpt partitions 1 2 3 4 5 6 [root@study ~]# lsblk /dev/vda # 实际的磁盘分区状态NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTvda 252:0 0 40G 0disk&#124;-vda1          252:1    0    2M  0 part&#124;-vda2          252:2    0    1G  0 part /boot&#124;-vda3          252:3    0   30G  0 part&#124; &#124;-centos-root 253:0    0   10G  0 lvm  /&#124; &#124;-centos-swap 253:1    0    1G  0 lvm  [SWAP]&#124; `-centos-home 253:2    0    5G  0 lvm  /home&#124;-vda4          252:4    0    1G  0 part&#124;-vda5          252:5    0    1G  0 part`-vda6          252:6    0  500M  0 part[root@study ~]# cat /proc/partitions # 核心的分区纪录 major minor  #blocks  name 252        0   41943040 vda 252        1       2048 vda1 252        2    1048576 vda2 252        3   31461376 vda3 252        4    1048576 vda4 252        5    1048576 vda5 252        6     512000 vda6 # 现在核心也正确的抓到了分区参数了!
  • 用gdisk删除一个分区

现在将我们刚刚新建的/dev/vda6删除。

[root@study ~]# disk /dev/vdaCommand (? for help): pNumber Start (sector) End (sector) Size Code Name1            2048            6143   2.0 MiB     EF022            6144         2103295   1024.0 MiB  07003         2103296        65026047   30.0 GiB    8E004        65026048        67123199   1024.0 MiB  8300  Linux filesystem5        67123200        69220351   1024.0 MiB  0700  Microsoft basic data6        69220352        70244351   500.0 MiB   8200  Linux swapCommand (? for help): d Partition number (1-6): 6 Command (? for help): p # 你会发现 /dev/vda6 不见了!非常棒!没问题就写入吧! Command (? for help): w # 同样会有一堆讯息!鸟哥就不重复输出了!自己选择 y 来处理吧! [root@study ~]# lsblk # 你会发现!怪了!怎么还是有 /dev/vda6 呢?没办法!还没有更新核心的分区表啊!所以当然有错! [root@study ~]# partprobe -s [root@study ~]# lsblk # 这个时候,那个 /dev/vda6 才消失不见了!了解吧!
  • disk

虽然MBR分区在未来应该会慢慢的被淘汰,但是在小磁盘的使用上,这时处理MBR分区表,就得要使用fdisk。

fdisk跟gdisk使用的方式几乎一样!只是一个使用?作为指令提示数据,一个使用m作为提示。此外,fdisk有时会使用柱面(cylinder)作为分区的最小单位,与gdisk默认使用sector不太一样,另外MBR分区是有限制的(Primary, Extened, Logical)。下面为相关的指令。

[root@study ~]# disk /dev/sdaCommand (m for help): m <== 输入 m 后,就会看到下面这些指令介绍Command actiona   toggle a bootable flagb   edit bsd disklabelc   toggle the dos compatibility flagd delete a partition <==删除一个partitionl   list known partition typesm   print this menun add a new partition <==新增一个partitiono   create a new empty DOS partition tablep print the partition table <==在屏幕上显示分区表q quit without saving changes <==不储存离开fdisk程序s   create a new empty Sun disklabelt   change a partition's system idu   change display/entry unitsv   verify the partition tablew write table to disk and exit &lt;==将刚刚的动作写入分区表x extra functionality (experts only)

###磁盘格式化(创建文件系统)

分区完毕后自然就是要进行文件系统的格式化,格式化的命令非常的简单,那就是"make filesystem,mkfs"这个指令。这个指令是个综合的指令,他会去调用正确的文件系统格式化工具软件!

  • XFS文件系统mkfs.xfs

我们常听到的"格式化"其实应该称为"创建文件系统(make filesystem)"才对,所以使用的指令为mkfs,因为我们要创建的其实是xfs文件系统,因此使用的是mkfs.xfs这个指令。这个指令是这样使用的:

[root@study ~]# mkfs.xfs [-b bsize] [-d parms] [-I parms] [-L label] [-f] [-r parms] 设备名称选项与参数:关于单位:下面只要谈到“数值”时,没有加单位则为 Bytes 值,可以用 k,m,g,t,p (小写)等来解释比较特殊的是 s 这个单位,它指的是 sector 的“个数”!-b :后面接的是 block 容量,可由 512 到 64k,不过最大容量限制为 Linux 的 4k !-d :后面接的是重要的 data section 的相关参数值,主要的值有:agcount=数值 :设置需要几个储存群组的意思(AG),通常与 CPU 有关agsize=数值 :每个 AG 设置为多少容量的意思,通常 agcount/agsize 只选一个设置即可file :指的是“格式化的设备是个文件而不是个设备”的意思!(例如虚拟磁盘)size=数值 :data section 的容量,亦即你可以不将全部的设备容量用完的意思su=数值 :当有 RAID 时,那个 stripe 数值的意思,与下面的 sw 搭配使用sw=数值 :当有 RAID 时,用于储存数据的磁盘数量(须扣除备份碟与备用碟)sunit=数值 :与 su 相当,不过单位使用的是“几个 sector(512Bytes大小)”的意思swidth=数值 :就是 su*sw 的数值,但是以“几个 sector(512Bytes大小)”来设置-f :如果设备内已经有文件系统,则需要使用这个 -f 来强制格式化才行!-i :与 inode 有较相关的设置,主要的设置值有:size=数值 :最小是 256Bytes 最大是 2k,一般保留 256 就足够使用了!internal=[0&#124;1]:log 设备是否为内置?默认为 1 内置,如果要用外部设备,使用下面设置logdev=device :log 设备为后面接的那个设备上头的意思,需设置 internal=0 才可!size=数值 :指定这块登录区的容量,通常最小得要有 512 个 block,大约 2M 以上才行!-L :后面接这个文件系统的标头名称 Label name 的意思!-r :指定 realtime section 的相关设置值,常见的有:extsize=数值 :就是那个重要的 extent 数值,一般不须设置,但有 RAID 时,最好设置与 swidth 的数值相同较佳!最小为 4K 最大为 1G 。范例:将前一小节分区出来的 /dev/vda4 格式化为 xfs 文件系统[root@study ~]# mkfs.xfs /dev/vda4meta-data=/dev/vda4       isize=256    agcount=4, agsize=65536 blks=                sectsz=512   attr=2, projid32bit=1=                crc=0        finobt=0data     =                bsize=4096   blocks=262144, imaxpct=25=                sunit=0      swidth=0 blksnaming   =version 2       bsize=4096   ascii-ci=0 ftype=0log      =internal log    bsize=4096   blocks=2560, version=2=                sectsz=512   sunit=0 blks, lazy-count=1realtime =none            extsz=4096   blocks=0, rtextents=0# 很快格是化完毕!都用默认值!较重要的是 inode 与 block 的数值[root@study ~]# blkid /dev/vda4 /dev/vda4: UUID="39293f4f-627b-4dfd-a015-08340537709c" TYPE="xfs" # 确定创建好 xfs 文件系统了!
  • XFS文件系统forRAID性能优化(Optional)

  • EXT4文件系统mkfs.ext4

[root@study ~]# mkfs.ext4 [-b size] [-L label] 设备名称选项与参数: -b :设置 block 的大小,有 1K, 2K, 4K 的容量, -L :后面接这个设备的标头名称。 范例:将 /dev/vda5 格式化为 ext4 文件系统[root@study ~]# mkfs.ext4 /dev/vda5mke2fs 1.42.9 (28-Dec-2013)Filesystem label=   # 显示 Label nameOS type: LinuxBlock size=4096 (log=2) # 每一个 block 的大小Fragment size=4096 (log=2)Stride=0 blocks, Stripe width=0 blocks # 跟 RAID 相关性较高65536 inodes, 262144 blocks # 总计 inode/block 的数量13107 blocks (5.00%) reserved for the super userFirst data block=0Maximum filesystem blocks=2684354568 block groups # 共有 8 个 block groups 喔!32768 blocks per group, 32768 fragments per group8192 inodes per groupSuperblock backups stored on blocks:32768, 98304, 163840, 229376Allocating group tables: done Writing inode tables: done Creating journal (8192 blocks): done Writing superblocks and filesystem accounting information: done [root@study ~]# dumpe2fs -h /dev/vda5dumpe2fs 1.42.9 (28-Dec-2013)Filesystem volume name:   &lt;none&gt;Last mounted on:          &lt;not available&gt;Filesystem UUID:          3fd5cc6f-a47d-46c0-98c0-d43b072e0e12....(中间省略)....Inode count:              65536Block count:              262144Block size:               4096Blocks per group:         32768Inode size:   256  Journal size:             32M
  • 其他文件系统mkfs

mkfs其实是个综合指令,当我们使用mkfs -t xfs时,就会使用mkfs.xfs 相关的参数。如果想知道系统还支持那种文件系统的格式化功能。直接[tab]就很清楚了。

###文件系统检验

  • xfs_repair处理XFS文件系统

当有xfs文件系统错乱才需要使用这个指令。

[root@study ~]# xfs_repair [-fnd] 设备名称选项与参数: -f :后面的设备其实是个文件而不是实体设备 -n :单纯检查并不修改文件系统的任何数据 (检查而已) -d :通常用在单人维护模式下面,针对根目录 (/) 进行检查与修复的动作!很危险!不要随便使用 范例:检查一下刚刚创建的 /dev/vda4 文件系统[root@study ~]# xfs_repair /dev/vda4Phase 1 - find and verify superblock...Phase 2 - using internal logPhase 3 - for each AG...Phase 4 - check for duplicate blocks...Phase 5 - rebuild AG headers and trees...Phase 6 - check inode connectivity...Phase 7 - verify and correct link counts...done# 共有 7 个重要的检查流程!详细的流程介绍可以 man xfs_repair 即可!范例:检查一下系统原本就有的 /dev/centos/home 文件系统 [root@study ~]# xfs_repair /dev/centos/home xfs_repair: /dev/centos/home contains a mounted filesystem xfs_repair: /dev/centos/home contains a mounted and writable filesystem fatal error -- couldn't initialize XFS library
  • fsck.ext4处理ext4文件系统

fsck是个综合指令,如果是针对ext4的话,建议直接使用fsck.ext4来检测比较妥当,

[root@study ~]# fsck.ext4 [-pf] [-b superblock] 设备名称选项与参数:-p :当文件系统在修复时,若有需要回复 y 的动作时,自动回复 y 来继续进行修复动作。-f :强制检查!一般来说,如果 fsck 没有发现任何 unclean 的旗标,不会主动进入细部检查的,如果您想要强制 fsck 进入细部检查,就得加上 -f 旗标 !-D :针对文件系统下的目录进行最优化配置。-b :后面接 superblock 的位置!一般来说这个选项用不到。但是如果你的 superblock 因故损毁时,通过这个参数即可利用文件系统内备份的 superblock 来尝试救援。一般来说,superblock 备份在:1K block 放在 8193, 2K block 放在 16384, 4K block 放在 32768范例:找出刚刚创建的 /dev/vda5 的另一块 superblock,并据以检测系统 [root@study ~]# dumpe2fs -h /dev/vda5 &#124; grep 'Blocks per group' Blocks per group:         32768 # 看起来每个 block 群组会有 32768 个 block,因此第二个 superblock 应该就在 32768 上! # 因为 block 号码为 0 号开始编的! [root@study ~]# fsck.ext4 -b 32768 /dev/vda5 e2fsck 1.42.9 (28-Dec-2013) /dev/vda5 was not cleanly unmounted, check forced. Pass 1: Checking inodes, blocks, and sizes Deleted inode 1577 has zero dtime.  Fix&lt;y&gt;? yes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/vda5: ***** FILE SYSTEM WAS MODIFIED ***** # 文件系统被改过,所以这里会有警告! /dev/vda5: 11/65536 files (0.0% non-contiguous), 12955/262144 blocks # 好巧合!鸟哥使用这个方式来检验系统,恰好遇到文件系统出问题!于是可以有比较多的解释方向! # 当文件系统出问题,它就会要你选择是否修复~如果修复如上所示,按下 y 即可! # 最终系统会告诉你,文件系统已经被更改过,要注意该项目的意思! 范例:已默认设置强制检查一次 /dev/vda5 [root@study ~]# fsck.ext4 /dev/vda5 e2fsck 1.42.9 (28-Dec-2013) /dev/vda5: clean, 11/65536 files, 12955/262144 blocks # 文件系统状态正常,它并不会进入强制检查!会告诉你文件系统没问题 (clean) [root@study ~]# fsck.ext4 -f /dev/vda5 e2fsck 1.42.9 (28-Dec-2013) Pass 1: Checking inodes, blocks, and sizes ....(下面省略)...

###文件系统挂载与卸载

挂载前,需要先确定几件事:

  • 单一文件系统不应该被重复挂载在不同的挂载点(目录)中
  • 单一目录不应该重复挂载多个文件系统;
  • 要作为挂载点的目录,理论上应该都是空目录。

而要将文件系统挂载到我们的Linux系统上,需要使用mount这个指令。

[root@study ~]# mount -a[root@study ~]# mount [-l][root@study ~]# mount [-t 文件系统] LABEL='' 挂载点[root@study ~]# mount [-t 文件系统] UUID='' 挂载点 # 鸟哥近期建议用这种方式喔![root@study ~]# mount [-t 文件系统] 设备文件名 挂载点选项与参数:-a :依照配置文件 [/etc/fstab](../Text/index.html#fstab) 的数据将所有未挂载的磁盘都挂载上来-l :单纯的输入 mount 会显示目前挂载的信息。加上 -l 可增列 Label 名称!-t :可以加上文件系统种类来指定欲挂载的类型。常见的 Linux 支持类型有:xfs, ext3, ext4,reiserfs, vfat, iso9660(光盘格式), nfs, cifs, smbfs (后三种为网络文件系统类型)-n :在默认的情况下,系统会将实际挂载的情况实时写入 /etc/mtab 中,以利其他程序的运行。但在某些情况下(例如单人维护模式)为了避免问题会刻意不写入。此时就得要使用 -n 选项。-o :后面可以接一些挂载时额外加上的参数!比方说帐号、密码、读写权限等:async, sync: 此文件系统是否使用同步写入 (sync) 或非同步 (async) 的内存机制,请参考文件系统运行方式。默认为asyncatime,noatime: 是否修订文件的读取时间(atime)。为了性能,某些时刻可使用 noatimero, rw: 挂载文件系统成为只读(ro) 或可读写(rw)auto, noauto: 允许此 filesystem 被以 mount -a 自动挂载(auto)dev, nodev: 是否允许此 filesystem 上,可创建设备文件? dev 为可允许suid, nosuid: 是否允许此 filesystem 含有 suid/sgid 的文件格式?exec, noexec: 是否允许此 filesystem 上拥有可执行 binary 文件?user, nouser: 是否允许此 filesystem 让任何使用者执行 mount ?一般来说,mount 仅有 root 可以进行,但下达 user 参数,则可让一般 user 也能够对此 partition 进行 mount 。defaults: 默认值为:rw, suid, dev, exec, auto, nouser, and asyncremount: 重新挂载,这在系统出错,或重新更新参数时,很有用!

系统指定哪些类型的filesystem才需要挂载测试?主要参考下面这两个文件:

  • /etc/filesystem : 系统指定的测试挂载文件系统类型的优先顺序;
  • /proc/filesystem : Linux系统已经载入的文件系统类型。

Linux支持的文件系统驱动程序都写在如下的目录下:

  • /lib/modules/$(-uname -r)/kernel/fs/

过去我们习惯使用设备文件名然后直接使用文件名挂载,不过建议使用UUID来识别文件系统。会比设备名称与标头名称还要可靠。因为是独一无二的。

  • 挂载xfs/ext4/vfat等文件系统
范例:找出 /dev/vda4 的 UUID 后,用该 UUID 来挂载文件系统到 /data/xfs 内[root@study ~]# blkid /dev/vda4 /dev/vda4: UUID="e0a6af55-26e7-4cb7-a515-826a8bd29e90" TYPE="xfs" [root@study ~]# mount UUID="e0a6af55-26e7-4cb7-a515-826a8bd29e90" /data/xfs mount: mount point /data/xfs does not exist # 非正规目录!所以手动创建它! [root@study ~]# mkdir -p /data/xfs [root@study ~]# mount UUID="e0a6af55-26e7-4cb7-a515-826a8bd29e90" /data/xfs [root@study ~]# df /data/xfs Filesystem     1K-blocks  Used Available Use% Mounted on /dev/vda4        1038336 32864   1005472   4% /data/xfs # 顺利挂载,且容量约为 1G 左右没问题! 范例:使用相同的方式,将 /dev/vda5 挂载于 /data/ext4 [root@study ~]# blkid /dev/vda5 /dev/vda5: UUID="899b755b-1da4-4d1d-9b1c-f762adb798e1" TYPE="ext4" [root@study ~]# mkdir /data/ext4 [root@study ~]# mount UUID="899b755b-1da4-4d1d-9b1c-f762adb798e1" /data/ext4 [root@study ~]# df /data/ext4 Filesystem     1K-blocks  Used Available Use% Mounted on   /dev/vda5         999320  2564    927944   1% /data/ext4
  • 挂载CD或DVD光盘
范例:将你用来安装 Linux 的 CentOS 原版光盘拿出来挂载到 /data/cdrom![root@study ~]# balked .....(前面省略)..... /dev/sr0: UUID="2015-04-01-00-21-36-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" [root@study ~]# mkdir /data/cdrom [root@study ~]# mount /dev/sr0 /data/cdrom mount: /dev/sr0 is write-protected, mounting read-only [root@study ~]# df /data/cdrom Filesystem     1K-blocks    Used Available Use% Mounted on /dev/sr0         7413478 7413478         0 100% /data/cdrom# 怎么会使用掉 100% 呢?是啊!因为是 DVD 啊!所以无法再写入了啊!
  • 挂载vfat中文U盘(USB磁盘)
范例:找出你的U盘设备的 UUID,并挂载到 /data/usb 目录中[root@study ~]# blkid /dev/sda1: UUID="35BC-6D6B" TYPE="vfat" [root@study ~]# mkdir /data/usb [root@study ~]# mount -o codepage=950,iocharset=utf8 UUID="35BC-6D6B" /data/usb [root@study ~]# # mount -o codepage=950,iocharset=big5 UUID="35BC-6D6B" /data/usb [root@study ~]# df /data/usb Filesystem     1K-blocks  Used Available Use% Mounted on /dev/sda1        2092344     4   2092340   1% /data/usb
  • 重新挂载根目录与挂载不特定目录

如果你的挂载参数要改变, 或者是根目录出现“只读”状态时,如何重新挂载呢?最可能的处理方 式就是重新开机 (reboot)! 不过你也可以这样做:

范例:将 / 重新挂载,并加入参数为 rw 与 auto [root@study ~]# mount -o remount,rw,auto /

另外,我们也可以利用 mount 来将某个目录挂载到另外一个目录去喔!这并不是挂载文件系 统,而是额外挂载某个目录的方法! 虽然下面的方法也可以使用 symbolic link 来链接,不过 在某些不支持符号链接的程序运行中,还是得要通过这样的方法才行。

root@study ~]# mkdir /data/var[root@study ~]# mount --bind /var /data/var[root@study ~]# ls -lid /var /data/var16777346 drwxr-xr-x. 22 root root 4096 Jun 15 23:43 /data/var16777346 drwxr-xr-x. 22 root root 4096 Jun 15 23:43 /var# 内容完全一模一样啊!因为挂载目录的缘故!root@study ~]# mount | grep var/dev/mapper/centos-root on /data/var type xfs (rw,relatime,seclabel,attr2,inode64,noquota)

看起来,其实两者链接到同一个 inode ! 通过这个 mount --bind 的功能,可以将某个目录挂载到其他目录去喔!而并不是整块 filesystem 的啦!所以从此进入 /data/var 就是进入 /var 的意思!

  • umount (将设备文件卸载)
[root@study ~]# umount [-fn] 设备文件名或挂载点选项与参数: -f :强制卸载!可用在类似网络文件系统 (NFS) 无法读取到的情况下; -l :立刻卸载文件系统,比 -f 还强! -n :不更新 /etc/mtab 情况下卸载。范例:将之前自行挂载的文件系统全部卸载:[root@study ~]# mount.....(前面省略)...../dev/vda4 on /data/xfs type xfs (rw,relatime,seclabel,attr2,inode64,logbsize=256k,sunit=512,..)/dev/vda5 on /data/ext4 type ext4 (rw,relatime,seclabel,data=ordered)/dev/sr0 on /data/cdrom type iso9660 (ro,relatime)/dev/sda1 on /data/usb type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=950,iocharset=...)/dev/mapper/centos-root on /data/var type xfs (rw,relatime,seclabel,attr2,inode64,noquota)# 先找一下已经挂载的文件系统,如上所示,特殊字体即为刚刚挂载的设备 !# 基本上,卸载后面接设备或挂载点都可以!不过最后一个 centos-root 由于有其他挂载,# 因此,该项目一定要使用挂载点来卸载才行![root@study ~]# umount /dev/vda4      <==用设备文件名来卸载[root@study ~]# umount /data/ext4     <==用挂载点来卸载[root@study ~]# umount /data/cdrom    <==因为挂载点比较好记忆![root@study ~]# umount /data/usb     [root@study ~]# umount /data/var      <==一定要用挂载点!因为设备有被其他方式挂载

###磁盘/文件系统参数修订

  • mknod

在Linux下面所有的设备都以文件来表示,但是那个文件如何代表设备呢?就是通过文件的major与minor数值来代替的。举例来说

root@study ~]# ll /dev/vda*brw-rw----. 1 root disk 252, 0 Jun 24 02:30 /dev/vdabrw-rw----. 1 root disk 252, 1 Jun 24 02:30 /dev/vda1brw-rw----. 1 root disk 252, 2 Jun 15 23:43 /dev/vda2brw-rw----. 1 root disk 252, 3 Jun 15 23:43 /dev/vda3brw-rw----. 1 root disk 252, 4 Jun 24 20:00 /dev/vda4brw-rw----. 1 root disk 252, 5 Jun 24 21:15 /dev/vda5

上表当中 252 为主要设备代码 (Major) 而 0~5 则为次要设备代码 (Minor)。 我们的 Linux 核心认识的设备数据就是通过这两个数值来决定的!

某些情况下面我们可能还是得要手动处理设备文件的,例如 在某些服务被关到特定目录下时(chroot), 就需要这样做了。此时这个 mknod 就得要知道 如何操作才行!

[root@study ~]# mknod 设备文件名 [bcp] [Major] [Minor]选项与参数: 设备种类: b :设置设备名称成为一个周边储存设备文件,例如磁盘等; c :设置设备名称成为一个周边输入设备文件,例如鼠标/键盘等; p :设置设备名称成为一个 FIFO 文件; Major :主要设备代码; Minor :次要设备代码; 范例:由上述的介绍我们知道 /dev/vda10 设备代码 252, 10,请创建并查阅此设备 [root@study ~]# mknod /dev/vda10 b 252 10 [root@study ~]# ll /dev/vda10 brw-r--r--. 1 root root 252, 10 Jun 24 23:40 /dev/vda10 # 上面那个 252 与 10 是有意义的,不要随意设置啊! 范例:创建一个 FIFO 文件,文件名为 /tmp/testpipe [root@study ~]# mknod /tmp/testpipe p [root@study ~]# ll /tmp/testpipe prw-r--r--. 1 root root 0 Jun 24 23:44 /tmp/testpipe # 注意啊!这个文件可不是一般文件,不可以随便就放在这里! # 测试完毕之后请删除这个文件吧!看一下这个文件的类型!是 p 喔!^_^ [root@study ~]# rm /dev/vda10 /tmp/testpipe rm: remove block special file '/dev/vda10' ? y rm: remove fifo '/tmp/testpipe' ? y
  • xfs_admin修改XFS文件系统的UUID与label name
[root@study ~]# xfs_admin [-lu] [-L label] [-U uuid] 设备文件名选项与参数: -l :列出这个设备的 label name -u :列出这个设备的 UUID -L :设置这个设备的 Label name -U :设置这个设备的 UUID 喔! 范例:设置 /dev/vda4 的 label name 为 vbird_xfs,并测试挂载 [root@study ~]# xfs_admin -L vbird_xfs /dev/vda4 writing all SBs new label = "vbird_xfs" # 产生新的 LABEL 名称 ! [root@study ~]# xfs_admin -l /dev/vda4 label = "vbird_xfs" [root@study ~]# mount LABEL=vbird_xfs /data/xfs/ 范例:利用 uuidgen 产生新 UUID 来设置 /dev/vda4,并测试挂载[root@study ~]# umount /dev/vda4 # 使用前,请先卸载![root@study ~]# uuidgene0fa7252-b374-4a06-987a-3cb14f415488 # 很有趣的指令!可以产生新的 UUID 喔![root@study ~]# xfs_admin -u /dev/vda4UUID = e0a6af55-26e7-4cb7-a515-826a8bd29e90[root@study ~]# xfs_admin -U e0fa7252-b374-4a06-987a-3cb14f415488 /dev/vda4Clearing log and setting UUIDwriting all SBsnew UUID = e0fa7252-b374-4a06-987a-3cb14f415488[root@study ~]# mount UUID=e0fa7252-b374-4a06-987a-3cb14f415488 /data/xfs
  • tune2fs修改ext4的label name与UUID
[root@study ~]# tune2fs [-l] [-L label] [-U UUID] 设备文件名选项与参数: -l :类似 dumpe2fs -h 的功能~将 superblock 内的数据读出来~ -L :修改 LABEL name -U :修改 UUID  ! 范例:列出 /dev/vda5 的 label name 之后,将它改成 vbird_ext4 [root@study ~]# dumpe2fs -h /dev/vda5 &#124; grep name dumpe2fs 1.42.9 (28-Dec-2013) Filesystem volume name: &lt;none&gt; # 果然是没有设置的! [root@study ~]# tune2fs -L vbird_ext4 /dev/vda5 [root@study ~]# dumpe2fs -h /dev/vda5 &#124; grep name Filesystem volume name:   vbird_ext4   [root@study ~]# mount LABEL=vbird_ext4 /data/ext4

广告 广告

评论区