文章目录

    • 列出装置的 UUID 等参数
    • parted 列出磁盘的分区表类型与分区信息
    • 磁盘分区:gdisk、fdisk
      • 用 gdisk 新增分区槽
      • 用 gdisk 删除一个分区槽
    • 磁盘格式化(建立文件系统)
      • XFS 文件系统 mkfs.xfs
      • XFS 文件系统 for RAID 效能优化(Optional)
      • EXT4 文件系统 mkfs.ext4
    • 文件系统检验
  • xfs_repair 处理 XFS 文件系统
      • fsck.ext4 处理 ext4 文件系统
    • 文件系统挂载与卸载
      • 挂载 xfs/ext4/vfat 等文件系统
      • 重新挂载根目录与挂载不特定目录
      • umount 将装置文件卸除

列出装置的 UUID 等参数

lsblk -f

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

语法:parted device_name print

磁盘分区:gdisk、fdisk

  • MBR:使用 fdisk 分区
  • GPT:使用 gdisk 分区
    所以下面的使用 gdisk 来操作
gdisk 装置名称


有两个重要信息:指令 q 和 w,在 gdisk 里面执行的操作,只有使用这两个指令后才会生效, 使用 q 退出不生效,使用 w 生效并离开。

用 gdisk 新增分区槽

1 GB 的 xfs 文件系统(linux)
1 GB 的 vfat 文件系统(windows)
0.5 GB 的 swap (linux swap)
root@study ~]# gdisk /dev/sda
Command (? for help): p
Number  Start (sector)    End (sector)  Size       Code  Name1            2048            6143   2.0 MiB     EF02  2            6144         2103295   1024.0 MiB  0700  3         2103296        65026047   30.0 GiB    8E00
# 打印分区信息,主要目的是为了找到最后一个 sector 的号码,这里是 65026047
# 使用指令 n 增加物理分区
Command (? for help): n
Partition number (4-128, default 4): 4  # 分区号码,这里默认就是 4,所以可以直接按回车
First sector (34-85491678, default = 65026048) or {+-}size{KMGTP}: # 第一个扇区号码,同样有默认的
Last sector (65026048-85491678, default = 85491678) or {+-}size{KMGTP}: +1G  # 结束扇区号码
# 上面有默认的值,不需要我们自己计算扇区数量,使用 +- KMGTP 等单位容量方式来容量# 选择未来该分区槽预计使用的文件系统,预设的都是 linux 文件系统的 8300
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'# 再次打印,就发现多了刚刚分出来的分区信息
Command (? for help): p
Disk /dev/sda: 85491712 sectors, 40.8 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 67038DBF-B66A-4D0F-92B2-BFBF0744CD1D
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 85491678
Partitions will be aligned on 2048-sector boundaries
Total free space is 18370493 sectors (8.8 GiB)Number  Start (sector)    End (sector)  Size       Code  Name1            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那么后面两个区的分区继续,记得每次分区完就打印下信息,查看是否正确Command (? for help): n
Partition number (5-128, default 5):
First sector (34-85491678, default = 67123200) or {+-}size{KMGTP}:
Last sector (67123200-85491678, default = 85491678) or {+-}size{KMGTP}: +1G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 0700  # 0700 为 windows 文件系统
Changed type of partition to 'Microsoft basic data'Command (? for help): n
Partition number (6-128, default 6):
First sector (34-85491678, default = 69220352) or {+-}size{KMGTP}:
Last sector (69220352-85491678, default = 85491678) or {+-}size{KMGTP}: +500M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 8200  # linux swap
Changed type of partition to 'Linux swap'# 最后分区完成后的分区信息如下
Command (? for help): n
...
Number  Start (sector)    End (sector)  Size       Code  Name1            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 filesystem5        67123200        69220351   1024.0 MiB  0700  Microsoft basic data6        69220352        70244351   500.0 MiB   8200  Linux swap# 分区的时候需要使用到 code,上面有对应的 code 数值了
# 如果忘记或则不知道,可以使用 l 命令来显示所有的 code 值
Command (? for help): l
0700 Microsoft basic data  0c01 Microsoft reserved    2700 Windows RE
3000 ONIE boot             3001 ONIE config           4100 PowerPC PReP boot
...# 最后使用 w 命令写入磁盘分区表
Command (? for help): wFinal 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/sda.
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.# 等你输入 y 确认之后,开始执行,上面的警告信息翻译如下
警告:内核仍在使用旧的分区表。
新表将在下次重新启动时使用。
操作已成功完成。# 查看信息,发现分区中还没有出现 sda4、5、6 ,这是因为核心还没有更新
[root@study ~]# cat /proc/partitions
major minor  #blocks  name8        0   42745856 sda8        1       2048 sda18        2    1048576 sda28        3   31461376 sda38       16    2097152 sdb11        0      75354 sr0253        0   10485760 dm-0253        1    1048576 dm-1253        2    5242880 dm-2

用 gdisk 删除一个分区槽

需要注意的是:不要去处理一个 正在使用中的分区槽 。例如:现在已经使用了 /dev/sda5, 必须先将 /dev/sda5 先 卸载 ,否则直接删除该分区的话,虽然磁盘会写入正确的分区信息, 但是核心会无法更新分区表的信息。

总之:千万不要处理正在活动的文件系统,先卸载后再处理

[root@study ~]# gdisk /dev/sda
GPT fdisk (gdisk) version 0.8.10Partition table scan:MBR: protectiveBSD: not presentAPM: not presentGPT: presentFound valid GPT with protective MBR; using GPT.# 查看分区信息
Command (? for help): p
Disk /dev/sda: 85491712 sectors, 40.8 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 67038DBF-B66A-4D0F-92B2-BFBF0744CD1D
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 85491678
Partitions will be aligned on 2048-sector boundaries
Total free space is 15249341 sectors (7.3 GiB)Number  Start (sector)    End (sector)  Size       Code  Name1            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 filesystem5        67123200        69220351   1024.0 MiB  0700  Microsoft basic data6        69220352        70244351   500.0 MiB   8200  Linux swap# 删除第 6 个分区
Command (? for help): d
Partition number (1-6): 6# 再次查看,发现 6 不在了
Command (? for help): p
Disk /dev/sda: 85491712 sectors, 40.8 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 67038DBF-B66A-4D0F-92B2-BFBF0744CD1D
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 85491678
Partitions will be aligned on 2048-sector boundaries
Total free space is 16273341 sectors (7.8 GiB)Number  Start (sector)    End (sector)  Size       Code  Name1            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 filesystem5        67123200        69220351   1024.0 MiB  0700  Microsoft basic data# 写入并离开
Command (? for help): wFinal 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/sda.
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.# 查看磁盘状态,发现 sda6 还存在,只是因为没有更新核心分区表导致的
# 使用命令 partprobe -s 更新下再查看就没有了
[root@study ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0 40.8G  0 disk
├─sda1            8:1    0    2M  0 part
├─sda2            8:2    0    1G  0 part /boot
├─sda3            8:3    0   30G  0 part
│ ├─centos-root 253:0    0   10G  0 lvm  /
│ ├─centos-swap 253:1    0    1G  0 lvm  [SWAP]
│ └─centos-home 253:2    0    5G  0 lvm  /home
├─sda4            8:4    0    1G  0 part
├─sda5            8:5    0    1G  0 part
└─sda6            8:6    0  500M  0 part
sdb               8:16   0    2G  0 disk
sr0              11:0    1 73.6M  0 rom  

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

分区完成之后需要进行格式化才能使用磁盘,可以使用指令「make filesystem,mkfs」,该指令是一个综合指令,回去调用正确的系统格式化工具软件。因为 CentOS 7 使用 xfs 作为预设文件系统,下面先介绍 mkfs.xfs ,再介绍新一代的 mkfs.ext4,最后再聊 mkfs 这个综合指令

XFS 文件系统 mkfs.xfs

常听到的格式化其实应该称为「建立文件系统(make filesystem)」。

mkfs.xfs [-b bsize][-d parms][-i parms][-l parms][-L parms][-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=数值:susw 的值,但是以「几个 sector(512bytes 大小)」来设置

  • f:如果装置内已经有文件系统,则需要使用该参数来强制格式化

  • i:与 inode 有较相关的设置,主要的设置值有:

    size=数值:最小是 256bytes,最大是 2k,一般保留 256 足够使用了
    

    internal=[0|1]:log 装置是否为内建?预设为 1 内建,如果需要使用外置的,配置下面的参数
    logdev=device:指定 log 装置在哪个装置上
    size=数值:指定这块登录区的容量,通常最小需要 512 个 block,大约 2M 以上

  • L:指定该文件系统的表头名称 Label name

  • r:指定 realtime section 的相关设置,常见的有

  • extsize=数值:就是那个重要的 extent 数值,一般不需要设置,担忧 RAID 时,最好设置与 swidth 相同的数值,最小为 4k ,最大为 1G
    

实践练习

# 将前面分区出来的 /dev/sda4 格式化为 xfs 文件系统
[root@study ~]# mkfs.xfs /dev/sda4
meta-data=/dev/sda4              isize=512    agcount=4, agsize=65536 blks=                       sectsz=512   attr=2, projid32bit=1=                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=262144, 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
# 很快就格式化完成了,不加任何参数使用的是默认值,较重要的是 inode 与 block 的数值
# isize 就是 inode的大小,bsize 就是 block 的大小# 查看信息,确定为 xfs 了
[root@study ~]# blkid /dev/sda4
/dev/sda4: UUID="4079b244-7ef8-47eb-85d0-1d634c8c703f" TYPE="xfs" PARTLABEL="Linux filesystem" PARTUUID="3819b115-2ab8-4fb6-8425-bb2ff8e797b7" 

一般使用默认的 xfs 文件系统参数来格式化即可,如果有其他额外的定制则需要添加对应的参数来设置。比如:因为 xfs 可以使用多个数据流来读写系统,增加速度,因此哪个 agcount 可以跟 CPU 的核心数量来做搭配。比如服务器有一颗 4 核心 8 线程的 CPU,其实就相当于是 8 核心了,可以设置为 8

# 找出系统的 CPU 数量,并设置 agcount 数量
[root@study ~]# grep 'processor' /proc/cpuinfo
processor       : 0
# 这里只有一个 processor,则表示只有一颗 CPU# 使用 -f (前面已经格式化有文件系统了,强制)-d 指定 agcount 数值
[root@study ~]# mkfs.xfs -f -d agcount=1 /dev/sda4
meta-data=/dev/sda4              isize=512    agcount=1, agsize=262144 blks=                       sectsz=512   attr=2, projid32bit=1=                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=262144, 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
# 不过:笔者发现,默认的 agcount=4 而不是按照 cpu 数量来的

XFS 文件系统 for RAID 效能优化(Optional)

磁盘阵列,是多颗磁盘组成一颗大磁盘的意思,利用同步写入到这些磁盘的技术,不但可以加快读写速度,还可以让某一颗磁盘坏掉时,整个文件系统还是开源持续运作的状态,这就是所谓的容错.

基本上,磁盘阵列 RAID 就是通过将文件先细分为数个小型的分区区块(stripe)后,将他们分别放到磁盘阵列里面的所有磁盘,所以一个文件是被同时写入到多个磁盘中去的(这也是为什么磁盘阵列高效读取的原因之一)。为了文件数据的安全,在这些磁盘中还会规划处一部分作为备份磁盘(parity disk),以及可能会保留一个以上的备用磁盘(spare disk),这些区块基本上会占用掉磁盘阵列的总容量,但是对于数据来说比较有保障

分区区块 stripe 的数值大多介于 4k 到 1m 之间,这与你的磁盘阵列卡支持的项目有关。stripe 与你的文件数据容量以及效能相关性较高。当用于大型文件时,一般建议 stripe 可以设置大一点,这样磁盘阵列读写频率会降低,效能会提升。如果是用于系统,那么小文件比较多的情况下,stripe 建议大约在 64K 左右可能会更好。不过,这些参数最好经过测试之后看是否能达到预期效果再调整。

文件系统的读写要能够有优化,最好能够搭配磁盘阵列的参数来设计;提前先在文件系统就将 stripe 规划好,哪交给 RAID 去存取时,它就无需重复进行文件的 stripe 过程,效能会更好,在格式化时,优化效能与哪些有关系呢?下面模拟一个环境:

  • CPU 2 核心,所以设置 agcount 为 2
  • 当初设置 RAID 的 stripe 指定为 256k ,因此 su 最好设置为 256k
  • 设置的磁盘阵列有 8 颗,因为是 RAID5 的设置,所以有一个 parity(备份碟)因此指定 sw 为 7
  • 由上述数据可以发现数据宽度 swidth 应该为 256k * 7 = 1792k,可以设置 extsize 为 1792k

这里仅快速的使用 mkfs.xfs 的参数来处理格式化动作(相关磁盘阵列要求的数量等,请自行百度)

[root@study ~]# mkfs.xfs -f -d agcount=2,su=256k,sw=7 -r extsize=1792k /dev/sda4
meta-data=/dev/sda4              isize=512    agcount=2, agsize=131072 blks=                       sectsz=512   attr=2, projid32bit=1=                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=262144, imaxpct=25=                       sunit=64     swidth=448 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2=                       sectsz=512   sunit=64 blks, lazy-count=1
realtime =none                   extsz=1835008 blocks=0, rtextents=0
# 关注 agcount、sunit、swidth、extsz 的值

从输出结果来看,agcount 没有问题

  • agcount:没有问题
  • sunit:64 个 block,64 * 4096(单个block 容量)=256K(也就是 su 的数值)
  • swidth:448 * 4k = 1792k(extsize 的数值)

如果 sunit 与 swidth 直接套用在 mkfs.xfs 中的话,就需要注意了,因为指令中的这两个参数用的是「几个 512bytes 的 sector 数量

  • sunit:256k/(512byte*1024)=512 个 sector
  • Swidth:7 个磁盘 * sunit = 7 * 512 = 3584 个 sector

所以指令就需要变成下面这样了

mkfs.xfs -f -d agcount=2,sunit=512,swidth=3584 -r extsize=1792k /dev/sda4

EXT4 文件系统 mkfs.ext4

mkfs.ext4 [-b size][-L label] 装置名称- b:设置 block 的大小,有 1k、2k、4k 的容量
- L:装置表头名称
# 将 /dev/sda5 格式化为 ext4 文件系统
[root@study ~]# mkfs.ext4 /dev/sda5
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)      # 每一个 block 大小
分块大小=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 user
第一个数据块=0
Maximum filesystem blocks=268435456
8 block groups      # 共有 8 个 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 32768, 98304, 163840, 229376Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (8192 blocks): 完成
Writing superblocks and filesystem accounting information: 完成[root@study ~]# dumpe2fs -h /dev/sda5
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          939ac781-62e4-48a9-a4c5-d804e0f0ee52
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              65536
Block count:              262144
Reserved block count:     13107
Free blocks:              249189
Free blocks:              249189
Free inodes:              65525
First block:              0
Block size:               4096
Fragment size:            4096
Group descriptor size:    64
Reserved GDT blocks:      127
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
Flex block group size:    16
Filesystem created:       Tue Oct 22 08:51:57 2019
Last mount time:          n/a
Last write time:          Tue Oct 22 08:51:57 2019
Mount count:              0
Maximum mount count:      -1
Last checked:             Tue Oct 22 08:51:57 2019
Check interval:           0 (<none>)
Lifetime writes:          33 MB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      9f6434c1-738d-47e2-ae2c-bc766c2198cd
Journal backup:           inode blocks
Journal features:         (none)
日志大小:             32M
Journal length:           8192
Journal sequence:         0x00000001
Journal start:            0

文件系统检验

当文件系统出现问题是,如硬件、软件、硬件等问题等宕机时。现在我们知道文件系统运作时会有磁盘与内存数据异步的状况发生,因此在宕机时可能导致文件系统的错乱。

不同的文件系统救援的指令不太一样,这里主要针对 xfs、ext4 两个主流的来讲解

xfs_repair 处理 XFS 文件系统

当有 xfs 文件系统错乱才需要使用该命令

xfs_repair [-fnd] 装置名- f:后面的装置是个文件(如虚拟硬盘)而不是实体状态
- n:单纯检查并不修改文件系统的任何数据
- d:通常用在单人维护模式下,针对根目录进行检查与修复的动作,很危险!不要随便使用

练习

检查 /dev/sda4 的文件系统
[root@study ~]# xfs_repair /dev/sda4
Phase 1 - find and verify superblock...
Phase 2 - using internal log- zero log...- scan filesystem freespace and inode maps...- found root inode chunk
Phase 3 - for each AG...- scan and clear agi unlinked lists...- process known inodes and perform inode discovery...- agno = 0- agno = 1- process newly discovered inodes...
Phase 4 - check for duplicate blocks...- setting up duplicate extent list...- check for inodes claiming duplicate blocks...- agno = 0- agno = 1
Phase 5 - rebuild AG headers and trees...- reset superblock...
Phase 6 - check inode connectivity...- resetting contents of realtime bitmap and summary inodes- traversing filesystem ...- traversal finished ...- moving disconnected inodes to lost+found ...
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 filesystemfatal error -- couldn't initialize XFS library

xfs_repair 可以检查或修复文件系统,因为修复工作是个很庞大的任务,不允许已挂载的文件系统,所以上面会提示 xfs_repair /dev/centos/home 是一个已挂载的文件系统(需要卸载后再处理)。

Linux 系统还有个根目录装置无法被卸载,要对根目录救援怎么办?这个就是单人救援模式来处理了,使用参数 -d 进入。记得很危险这个指令!

fsck.ext4 处理 ext4 文件系统

fsck.ext4 [-pf][-b superblock] 装置名称

选项与参数:

  • p:当文件系统在修复时,若有需要回复 y 的动作时,自动回复 y 来继续进行修复动作
  • f:强制检查。一般来说,如果 fsck 没有发现任何 unclean 的旗标,不会主动进入细部检查的,可以通过 -f 参数强制检查
  • D:针对该文件系统下的目录进行优化配置
  • b:后面接 superblock 的位置。一般来说该选项用不到,但是如果 superblock 因故损坏时,通过该参数即可利用文件系统内备份的 superblock 来尝试救援。一般来说 superblock 备份在: 1k block 放在 8193、2k block 放在16384、4k block 放在 32786

练习

# 找出刚刚建立的 /dev/sda5 的另一块 superblock,并检查它
# 发现报错了,这个是前面练习格式化成非 ext 系统了,这里需要格式化回来
[root@study ~]# dumpe2fs -h /dev/sda5 | grep 'Blocks per group'
dumpe2fs 1.42.9 (28-Dec-2013)
dumpe2fs: Bad magic number in super-block 当尝试打开 /dev/sda5 时
# 格式回 ext4
[root@study ~]# mkfs.ext4 /dev/sda5
[root@study ~]# dumpe2fs -h /dev/sda5 | grep 'Blocks per group'
dumpe2fs 1.42.9 (28-Dec-2013)
Blocks per group:         32768
# 看起来每个 block 群组会有 32768 个 block,因此第二个 superblock 应该就在 32768 上
# 因为 block 号码为 0 号开始[root@study ~]# fsck.ext4 -b 32768 /dev/sda5
e2fsck 1.42.9 (28-Dec-2013)
/dev/sda5 was not cleanly unmounted, 强制检查.
第一步: 检查inode,块,和大小
删除 inode 1577 has zero dtime.  处理<y>? 是
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息/dev/sda5: ***** 文件系统已修改 *****  # 文件系统被修改过,所以出现了警告
/dev/sda5: 11/65536 files (0.0% non-contiguous), 12955/262144 blocks# 如果没有检查到问题,则不会强制检查
[root@study ~]# fsck.ext4 /dev/sda5
e2fsck 1.42.9 (28-Dec-2013)
/dev/sda5: clean, 11/65536 files, 12955/262144 blocks
# -f 参数强制检查
[root@study ~]# fsck.ext4 -f /dev/sda5
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/sda5: 11/65536 files (0.0% non-contiguous), 12955/262144 blocks

xfs_repair s或 fsck.ext4 都是用来检查与修正文件系统错误的指令。注意:通常只有身为 root 且你的文件系统有问题的时候才使用该指令,正常情况下不要使用,可能会造成对系统的危害。通常使用的时候,都是系统出现了极大的问题,导致在 linux 开机的时候得进入单人单机模式下进行维护的行为时,才必须使用此指令

文件系统挂载与卸载

前面提到过挂载点是目录,目录是进入磁盘分区槽(其实是文件系统)的入口。在挂载前需要确定几件事情:

  • 单一文件系统不应该被重复挂载在不同的挂载点(目录)中

  • 单一目录不应该重复挂载多个文件系统

  • 要作为挂载点的目录,理论上都是空目录才是

    如果不是空目录,挂载之后,原来目录下的内容会暂时消失,等待分区被卸载之后才会显示出来

linux 系统上需要使用 mount 指令

mount -a
mount [-l]
mount [-t 文件系统] LABEL='' 挂载点
mount [-t 文件系统] UUID='' 挂载点
mount [-t 文件系统] 装置文件名='' 挂载点

a:按照配置文件 /etc/fstab 的数据将所有未挂载的磁盘都挂载上来
l:单纯的输入 mount 会显示目前挂载的信息。加上 -l 可增列 Label 名称
t:可以加上文件系统种类来指定欲挂载的类型。常见的 Linux 支持类型有
xfs
ext3
ext4
reiserfs
vfat
Iso9660(光盘格式)
nfs(网络文件系统类型)
cifs(网络文件系统类型)
smbfs(网络文件系统类型)

o:后面可以接一些挂载时额外加上的参数,例如账户、密码、读写权限等
async、sync:此文件系统是否使用同步写入(sync)或异步(async)的内存机制,请参考文件系统运作方式。预设为 async
atime、noatime:是否修订文件的读取时间(atime),为了效能,某些时刻刻使用 noatime
ro、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、async
remount:重新挂载,这在系统除错或重新更新参数时,很有用

挂载 xfs/ext4/vfat 等文件系统

# 先找出 uuid,使用 uuid 来挂载文件系统到 /data/xfs 内
[root@study fs]# blkid /dev/sda4
/dev/sda4: UUID="819c0c18-8d4a-4c3f-9a98-0ab039e769f5" TYPE="xfs" PARTLABEL="Linux filesystem" PARTUUID="3819b115-2ab8-4fb6-8425-bb2ff8e797b7"
[root@study fs]# mount UUID="819c0c18-8d4a-4c3f-9a98-0ab039e769f5" /data/xfs
mount: 挂载点 /data/xfs 不存在
[root@study fs]# mkdir -p /data/xfs
[root@study fs]# mount UUID="819c0c18-8d4a-4c3f-9a98-0ab039e769f5" /data/xfs
[root@study fs]# df /data/xfs
文件系统         1K-块  已用    可用       已用% 挂载点
/dev/sda4      1038336 32896 1005440    4% /data/xfs
# 这里顺利挂载了,且容量约为 1g 左右
[root@study fs]# df -h /data/xfs
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda4      1014M   33M  982M    4% /data/xfs# 使用相同的方式,将 /dev/sda5 挂载到 /dev/ext4 目录
[root@study fs]# mkdir /data/ext4
[root@study fs]# blkid /dev/sda5
/dev/sda5: UUID="b0923041-024a-47cf-a4b8-d59b573855d7" TYPE="ext4" PARTLABEL="Microsoft basic data" PARTUUID="9cffc784-99a3-40f6-8e5f-0c71b3bb7f05"
[root@study fs]# mount UUID="b0923041-024a-47cf-a4b8-d59b573855d7" /data/ext4
[root@study fs]# df /data/ext4
文件系统        1K-块  已用   可用 已用% 挂载点
/dev/sda5      999320  2564 927944    1% /data/ext4

重新挂载根目录与挂载不特定目录

根目录不能被卸载的,如果想要改变挂载参数或则根目录出现「只读」状态时,如何重新挂载呢?最可能的处理方式就是重新启动系统,但是可以用下面的指令来做

# 将 / 重新挂载,并加入参数为 rw 与 auto
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/var
69 drwxr-xr-x. 20 root root 282 10月  4 18:38 /data/var
69 drwxr-xr-x. 20 root root 282 10月  4 18:38 /var
# 可以看到两个目录一模一样# 通过 mount 指令查找 var 内容,看到下面的 /data/var 的挂载属性
[root@study ~]# mount | grep var
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
/dev/mapper/centos-root on /data/var type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
# 从此进入 /data/var 就是进入 /var 的效果了

umount 将装置文件卸除

umount [-fn] 装置文件名或挂载点-f:强制卸除,可用在类似网络文件系统无法读取到的情况下
-l:like卸除文件系统,比 -f 还强
-n:不更新 /etc/mtab 情况下卸除# 将本章讲解的示例挂载全部卸除
/dev/sr1 on /data/cdrom type iso9660 (ro,relatime)
/dev/mapper/centos-root on /data/var type xfs (rw,relatime,seclabel,attr2,inode64,noquota)# 笔者这里刚才虚拟机重启了,找不到 /data/xfs 和 /data/ext4 的挂载点信息了
# 查看了下目录信息,发现变成最后一个 一样的了,都是 /dev/mapper/centos-root# 卸载后面可以使用以下方式
# umount /dev/sr1  # 用装置文件名
umount /data/cdrom # 用挂载点来卸载
umount /data/var # 说是这个装置有被其他方式挂载,这里一定要用挂载点

磁盘划分和磁盘格式化相关推荐

  1. 《Linux就该这么学》培训笔记_ch06_存储结构与磁盘划分

    <Linux就该这么学>培训笔记_ch06_存储结构与磁盘划分 文章最后会post上书本的笔记照片. 文章主要内容: Linux系统的文件存储结构(FHS标准) 物理设备命名规则(udev ...

  2. 8Linux磁盘划分、RAID

    磁盘划分fdisk 1.磁盘分区 fdisk 2.格式化 mkfs.ext4 mkfs.xfs 3.挂载 mount 路径 挂载路径 fdisk命令中的参数以及作用 参数 作用 m 查看全部可用的参数 ...

  3. Linux 磁盘划分 LVM 逻辑分区管理步骤

    LVM 逻辑分区管理: Linux服务器存储中,有Disk. PV. VG. LV 四个概念 disk:磁盘,物理上存储最底层的, PV::物理卷,由磁盘或者分区创建 VG:卷组,由至少一个或者多个P ...

  4. 6.存储结构与磁盘划分

    第6章 存储结构与磁盘划分 章节简述: Linux系统中颇具特色的文件存储结构常常搞得新手头晕脑胀,本章将从Linux系统中的文件存储结构开始,讲述文件系统层次化标准(FHS,Filesystem H ...

  5. 卷毛崽|Linux自学|存储结构与磁盘划分

    存储结构与磁盘划分 1. 常见目录名称及对应内容 2. 物理设备的命名规则 3.挂载硬件设备 3.1 mount与umount 3.2 fdisk命令 3.3 du命令 3.4 示例 4.添加交换分区 ...

  6. 第6章 磁盘结构与磁盘划分

    磁盘结构与磁盘划分 序言 6.1 一切从"/"开始 6.2 物理设备的命名规则 6.3 文件系统与数据资料 6.4 挂载硬件设备 6.4.1 mount命令 6.4.2 umoun ...

  7. 《Linux就该这么学》 第6章 存储结构与磁盘划分

    6.1 一切从"/"开始Linux系统中的一切文件都是从"根(/)"目录开始的,并按照文件系统层次化标准(FHS)采用树形结构来存放文件,以及定义了常见目录的用 ...

  8. 1. Linux 磁盘管理(分区、格式化、挂载)

    目录 1.  Linux 内核版与发行版 2.  Linux中磁盘的管理(分区.格式化.挂载) 2.1 磁盘定义.分类和命名 2.2 分区的定义和划分 2.3 磁盘格式化(高级/逻辑格式化) 2.4 ...

  9. 20. 磁盘的分区,格式化,挂载——fdisk,mkfs,mount

    1.        VM虚拟机添加磁盘,识别磁盘将其添加到分区 注意:reboot之后系统才能识别新加硬盘. 2.        fdisk命令:fdisk -l 查看系统的分区详细信息 [root@ ...

最新文章

  1. 翻译:AKKA笔记 - Actor消息 -1(二)
  2. DataGridView中回车键的妙用
  3. Spring Security——根据请求Header[Accept]不同返回不同类型资源解决方案
  4. 窗口背景颜色修改 备忘
  5. activeMQ在文件上传的应用
  6. asterisk架构
  7. 高效实用Kafka-入门介绍
  8. 文档丨Oracle 三种迁移方案
  9. jquery ajax html php区别,ajax与jquery的区别是什么
  10. Lync Server 2010迁移至Lync Server 2013部署系列 Part14:A/V服务器目录迁移
  11. Python算法——查找数组前三名
  12. 菜狗杯Web_我眼里只有$wp
  13. 远程服务器 检索{00024500-0000-0000-C000-000000000046}组件失败 80080005 服务器运行失败 解决方案
  14. 微软2016校园招聘4月在线笔试 总结
  15. 关于华硕主板的图像输出设置
  16. Translatium for Mac(Google在线翻译工具)
  17. 贝壳找房 9月7日 笔试题 第四题-查族谱
  18. 什么叫黑链-SEO zuobi手法解析
  19. 原生php往word文件对应位置写入值 , 并实现预览和下载功能(超实用)
  20. kali双系统安装(超详细)

热门文章

  1. RGB、YUY2、YUYV、YVYU、UYVY、AYUV、YUV444、YUV422、YUV420、YUV411
  2. java am pm_java-在日期格式化后以小写形式显示AM和PM
  3. 第三次寻人启事,寻找在日本的朋友王君
  4. [转载]简介使用Java编写Palm OS程序的解决方案(2)
  5. 爱普生打印机维修资料大全
  6. SN74LVC245ARGYR与SN74LVCH245ARGYR的区别
  7. 2023ICPC西安邀请赛
  8. 【工业机器人】解读工业机器人如何应用到手机行业!
  9. 如何正视自身价值和自我定位 --------从产品定价方法来看求职者自身价值的估量...
  10. 截屏的各种实现(全屏or长截屏)