磁盘划分和磁盘格式化

news/2024/3/29 14:40:30/文章来源:https://blog.csdn.net/TH_NUM/article/details/128095882

文章目录

    • 列出装置的 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 装置名称

![在这里插入图片描述](https://img-blog.csdnimg.cn/b0da69b5a7ae4ffcb71791065f264e9b.pn
有两个重要信息:指令 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 # 说是这个装置有被其他方式挂载,这里一定要用挂载点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_38570.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中csv导出-追加-列转行

1、问题描述 业务数据量比较大&#xff0c;业务上查询条件写入数据库&#xff0c;java定时去读&#xff0c;然后导出csv&#xff0c;供用户下载&#xff0c;因为有模板要求&#xff0c;前一部分是统计信息&#xff0c;后一部分是明细信息&#xff1b;首先csv中写入统计信息&am…

IDEA的日常快捷键大全

更多内容在&#xff1a;https://javaxiaobear.gitee.io/ ​​​​​​第1组&#xff1a;通用型 说明 快捷键 复制代码-copy ctrl c 粘贴-paste ctrl v 剪切-cut ctrl x 撤销-undo ctrl z 反撤销-redo ctrl shift z 保存-save all ctrl s 全选-select all …

Python连接Clickhouse遇坑篇,耗时一天成功连接!

首先&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;不要看网上那些乱七八糟的使用clickhouse-driver连接了&#xff0c;真tm难用&#xff0c;端口能搞死你那种&#xff0c;超级烦&#xff01; 推荐直接看官方…

数商云SRM系统招标流程分享,助力建筑材料企业降低采购成本,提高采购效率

近年来&#xff0c;随着主管部门对房地产市场的监管非常严格&#xff0c;房地产业的发展已进入瓶颈期&#xff0c;这对与房地产业密切相关的建材行业产生了很大的影响。同时&#xff0c;我国城市化进入成熟期&#xff0c;行业规模发展动力减弱&#xff0c;建材行业增长压力明显…

Kotlin高仿微信-第8篇-单聊

Kotlin高仿微信-项目实践58篇详细讲解了各个功能点&#xff0c;包括&#xff1a;注册、登录、主页、单聊(文本、表情、语音、图片、小视频、视频通话、语音通话、红包、转账)、群聊、个人信息、朋友圈、支付服务、扫一扫、搜索好友、添加好友、开通VIP等众多功能。 Kotlin高仿…

VauditDemo靶场代码审计

靶场搭建 将下载好的VAuditDemo_Debug目录复制到phpstudy的www目录下&#xff0c;然后将其文件名字修改成VAuditDemo&#xff0c;当然你也可以修改成其他的 运行phpstudy并且访问install目录下的install.php&#xff0c;这里我访问的是http://127.0.0.1/VAuditDemo/install/in…

竞赛——【蓝桥杯】2022年12月第十四届蓝桥杯模拟赛第二期C/C++

1、最小的2022 问题描述 请找到一个大于 2022 的最小数&#xff0c;这个数转换成二进制之后&#xff0c;最低的 6 个二进制为全为 0 。 请将这个数的十进制形式作为答案提交。 答案提交 这是一道结果填空的题&#xff0c;你只需要算出结果后提交即可。本题的结果为一个整数…

Java学习之继承练习题

目录 第一题 代码 输出流程分析 运行结果 考察知识点 第二题 代码 流程分析 运行结果 第三题 题目要求 我的代码 代码改进 第一题 代码 package com.hspedu.extends_.exercise;public class ExtendsExercise01 {public static void main(String[] args) {B b new …

Sentinel-2(哨兵2数据介绍)

哥白尼 Sentinel-2&#xff08;哨兵 2&#xff09;计划是一个由两颗相同的 Sentinel-2 极轨卫星组成的星座&#xff0c;两颗卫星相位差 180&#xff0c;运行在平均高度 786 km 的太阳同步轨道上。每颗卫星在其轨道上的位置由双频全球导航卫星系统&#xff08;GNSS&#xff09;接…

ggrcs 包2.4绘制RCS(限制立方样条图)实际操作演示(1)

ggrcs 包2.4版本已经发布一段时间了&#xff0c;大概几个月了吧&#xff0c;收到不少好评&#xff0c; 没听说太大的问题&#xff0c;最主要的问题有两个&#xff1a; 1.是说变量不是数字变量。 2.是说数据超过10万&#xff0c;无法处理 第一个问题非常好处理&#xff0c;这…

R语言MCMC:Metropolis-Hastings采样用于回归的贝叶斯估计

全文链接&#xff1a;http://tecdat.cn/?p19664 MCMC是从复杂概率模型中采样的通用技术。蒙特卡洛马尔可夫链Metropolis-Hastings算法&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。问题如果需要计算有复杂后验pdf p&#xff08;θ| y&#xff09;的随机变量…

简单聊聊什么是react-redux,它能解决哪些问题

或许 在大多数人眼中 redux是一个相对复查很多的知识点 但确实如果你熟悉了流程 其实也比较简单的 redux是一个数据管理方案 我们先来举个例子 目前我们知道 react中有两种组件数据通信的方式 分别是 props 父传子 定义事件 子传父 通过事件将自己的数据传给父级 那如果是兄弟…

领悟《信号与系统》之 周期信号的傅里叶变换计算

周期信号的傅里叶变换计算一、周期信号的傅里叶变换存在的条件二、周期信号的傅里叶变换例题&#xff1a;一、周期信号的傅里叶变换存在的条件 典型非周期信号&#xff08;如指数信号&#xff0c;矩形信号等&#xff09;都是满足绝对可积&#xff08;或绝对可和&#xff09;条…

一种高选择性和灵敏的荧光生物标记物,可用于标记碱性磷酸酶 (ALP),5-FAM-Alkyne,510758-19-7,荧光生物标记物

【中文名称】5-羧基荧光素-炔烃【英文名称】 FAM alkyne,5-isomer&#xff0c;5-FAM alkyne【结 构 式】 【CAS号】510758-19-7 【分子式】C24H15NO6【分子量】413.39【基团】炔基基团【纯度】95%【规格标准】5mg&#xff0c;10mg&#xff0c;25mg&#xff0c;包装灵活&#x…

使用PyTorch实现简单的AlphaZero的算法(3):神经网络架构和自学习

神经网络架构和训练、自学习、棋盘对称性、Playout Cap Randomization&#xff0c;结果可视化 从我们之前的文章中&#xff0c;介绍了蒙特卡洛树搜索 (MCTS) 的工作原理以及如何使用它来获得给定棋盘状态的输出策略。我们也理解神经网络在 MCTS 中的两个主要作用&#xff1b;通…

xss-labs/level9

这一关界面感觉跟上一关很像 所以我们注入上一关的为编码的答案 javascript:alert(xss) 没能弹窗 查看源代码 他说我输入的链接不合法 我压根没有输入链接 我觉得后台应该是做了一个条件的判断 应该是要有链接才会在第二处输出点回显我们的输入 根据上面的猜测 我们构造如下…

Java.Integer.bitCount(int)源码解析

bitCount前言一、由易到难&#xff0c;头脑热身二、简单优化&#xff0c;一题多解三、分治优化四、bitCount(int)源码优化总结参考文献前言 如何求解一个二进制中1的个数&#xff1f;有常规的O(N)法&#xff0c;还有基于分治的O(logN)&#xff0c;即Java的bitCount(int)方法。…

我们为什么喜欢看疯狂科学家开飞艇?

很多人可能不是科幻迷&#xff0c;也在日常生活中接触过蒸汽朋克。为什么呢&#xff1f;很简单——蒸汽朋克几乎无处不在。相比其他科幻流派&#xff0c;蒸汽朋克可能算是最“出圈”的一种。简单地说&#xff0c;蒸汽朋克是一种科幻小说类型&#xff0c;由“蒸汽 ”(steam)和“…

《论文阅读》DeepSFM: Structure From Motion Via Deep Bundle Adjustment

留个笔记自用 DeepSFM: Structure From Motion Via Deep Bundle Adjustment 做什么 首先是最基础的&#xff0c;Structure-from-Motion&#xff08;SFM&#xff09;&#xff0c;SFM可以简单翻译成运动估计&#xff0c;是一种基于dui8序列图片进行三维重建的算法。简单来说就…

移动跨平台开发跨家选型参考建议

从 iPhone 诞生至今&#xff0c;智能手机风靡全球已将近20年&#xff0c;智能手机操作系统 iOS 和 Android 也成为当仁不让的顶流般的存在&#xff0c;而作为其背后的灵魂&#xff0c;移动应用也随着技术的发展已经越来越丰富。如果从技术层面来讲&#xff0c;移动 App 也从最开…