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

  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 printModel: Virtio Block Device (virtblk) # 磁盘的模块名称(厂商)Disk /dev/vda: 42.9GB # 磁盘的总容量Sector size (logical/physical): 512B/512B # 磁盘的每个逻辑/物理扇区容量Partition Table: gpt # 分区表的格式 (MBR/GPT)Disk Flags: pmbr_bootNumber Start End Size File system Name Flags # 下面才是分区数据1      1049kB  3146kB  2097kB                     bios_grub2      3146kB  1077MB  1074MB  xfs3      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: protectiveBSD: not presentAPM: not presentGPT: presentFound valid GPT with protective MBR; using GPT. <==找到了 GPT 的分区表!Command (? for help): <==这里可以让你输入指令动作,可以按问号 (?) 来查看可用指令
Command (? for help): ?
b       back up GPT data to a file
c       change a partition's name
d       delete a partition # 删除一个分区
i        show detailed information on a partition
l        list known partition types
n       add a new partition # 增加一个分区
o       create a new empty GUID partition table (GPT)
p       print the partition table # 印出分区表 (常用)
q       quit without saving changes # 不储存分区就直接离开 gdisk
r        recovery and transformation options (experts only)
s       sort partitions
t       change a partition's type code
v       verify disk
w      write table to disk and exit # 储存分区操作后离开 gdisk
x       extra functionality (experts only)
?       print this menu
Command (? 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 Bytes
Disk identifier (GUID): A4C3C813-62AF-4BFE-BAC9-112EBD87A483     # 磁盘的 GPT 识别码
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 83886046
Partitions will be aligned on 2048-sector boundaries
Total 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  07003         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/vadNumber Start (sector) End (sector) Size Code Name1            2048            6143   2.0 MiB     EF022            6144         2103295   1024.0 MiB  07003         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 # 也能 enter
Last 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): 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 filesystem

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

Command (? for help) : p
Number 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 data
6        69220352        70244351   500.0 MiB   8200  Linux swap

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

 Command (? for help): wFinal checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTINGPARTITIONS!!Do you want to proceed? (Y/N): yOK; 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/partitionsmajor minor  #blocks  name252        0   41943040 vda252        1       2048 vda1252        2    1048576 vda2252        3   31461376 vda3253        0   10485760 dm-0253        1    1048576 dm-1253        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 MOUNTPOINT
vda 252:0 0 40G 0disk
|-vda1          252:1    0    2M  0 part
|-vda2          252:2    0    1G  0 part /boot
|-vda3          252: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
|-vda4          252:4    0    1G  0 part
|-vda5          252:5    0    1G  0 part
`-vda6          252:6    0  500M  0 part[root@study ~]# cat /proc/partitions # 核心的分区纪录major minor  #blocks  name252        0   41943040 vda252        1       2048 vda1252        2    1048576 vda2252        3   31461376 vda3252        4    1048576 vda4252        5    1048576 vda5252        6     512000 vda6# 现在核心也正确的抓到了分区参数了!
  • 用gdisk删除一个分区

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

[root@study ~]# disk /dev/vda
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
5        67123200        69220351   1024.0 MiB  0700  Microsoft basic data
6        69220352        70244351   500.0 MiB   8200  Linux swapCommand (? for help): dPartition number (1-6): 6Command (? 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/sda
Command (m for help): m <== 输入 m 后,就会看到下面这些指令介绍
Command action
a   toggle a bootable flag
b   edit bsd disklabel
c   toggle the dos compatibility flag
d delete a partition <==删除一个partition
l   list known partition types
m   print this menu
n add a new partition <==新增一个partition
o   create a new empty DOS partition table
p print the partition table <==在屏幕上显示分区表
q quit without saving changes <==不储存离开fdisk程序
s   create a new empty Sun disklabel
t   change a partition's system id
u   change display/entry units
v   verify the partition table
w 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|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/vda4
meta-data=/dev/vda4       isize=256    agcount=4, agsize=65536 blks
=                sectsz=512   attr=2, projid32bit=1
=                crc=0        finobt=0
data     =                bsize=4096   blocks=262144, imaxpct=25
=                sunit=0      swidth=0 blks
naming   =version 2       bsize=4096   ascii-ci=0 ftype=0
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 的数值
[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/vda5
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=   # 显示 Label name
OS type: Linux
Block 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 user
First data block=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, 229376
Allocating group tables: doneWriting inode tables: doneCreating journal (8192 blocks): doneWriting superblocks and filesystem accounting information: done[root@study ~]# dumpe2fs -h /dev/vda5
dumpe2fs 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:              65536
Block count:              262144
Block size:               4096
Blocks per group:         32768
Inode size:   256Journal 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/vda4
Phase 1 - find and verify superblock...
Phase 2 - using internal log
Phase 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/homexfs_repair: /dev/centos/home contains a mounted filesystemxfs_repair: /dev/centos/home contains a mounted and writable filesystemfatal 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 | grep 'Blocks per group'Blocks per group:         32768# 看起来每个 block 群组会有 32768 个 block,因此第二个 superblock 应该就在 32768 上!# 因为 block 号码为 0 号开始编的![root@study ~]# fsck.ext4 -b 32768 /dev/vda5e2fsck 1.42.9 (28-Dec-2013)/dev/vda5 was not cleanly unmounted, check forced.Pass 1: Checking inodes, blocks, and sizesDeleted inode 1577 has zero dtime.  Fix&lt;y&gt;? yesPass 2: Checking directory structurePass 3: Checking directory connectivityPass 4: Checking reference countsPass 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/vda5e2fsck 1.42.9 (28-Dec-2013)/dev/vda5: clean, 11/65536 files, 12955/262144 blocks# 文件系统状态正常,它并不会进入强制检查!会告诉你文件系统没问题 (clean)[root@study ~]# fsck.ext4 -f /dev/vda5e2fsck 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) 的
内存机制,请参考文件系统运行方式。默认为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, and async
remount: 重新挂载,这在系统出错,或重新更新参数时,很有用!

系统指定哪些类型的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/xfsmount: 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/xfsFilesystem     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/ext4Filesystem     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/cdrommount: /dev/sr0 is write-protected, mounting read-only[root@study ~]# df /data/cdromFilesystem     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/usbFilesystem     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/var
16777346 drwxr-xr-x. 22 root root 4096 Jun 15 23:43 /data/var
16777346 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/vda
brw-rw----. 1 root disk 252, 1 Jun 24 02:30 /dev/vda1
brw-rw----. 1 root disk 252, 2 Jun 15 23:43 /dev/vda2
brw-rw----. 1 root disk 252, 3 Jun 15 23:43 /dev/vda3
brw-rw----. 1 root disk 252, 4 Jun 24 20:00 /dev/vda4
brw-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/vda10brw-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/testpipeprw-r--r--. 1 root root 0 Jun 24 23:44 /tmp/testpipe# 注意啊!这个文件可不是一般文件,不可以随便就放在这里!# 测试完毕之后请删除这个文件吧!看一下这个文件的类型!是 p 喔!^_^[root@study ~]# rm /dev/vda10 /tmp/testpiperm: remove block special file '/dev/vda10' ? yrm: 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/vda4writing all SBsnew label = "vbird_xfs" # 产生新的 LABEL 名称 ![root@study ~]# xfs_admin -l /dev/vda4label = "vbird_xfs"[root@study ~]# mount LABEL=vbird_xfs /data/xfs/范例:利用 uuidgen 产生新 UUID 来设置 /dev/vda4,并测试挂载
[root@study ~]# umount /dev/vda4 # 使用前,请先卸载!
[root@study ~]# uuidgen
e0fa7252-b374-4a06-987a-3cb14f415488 # 很有趣的指令!可以产生新的 UUID 喔!
[root@study ~]# xfs_admin -u /dev/vda4
UUID = e0a6af55-26e7-4cb7-a515-826a8bd29e90
[root@study ~]# xfs_admin -U e0fa7252-b374-4a06-987a-3cb14f415488 /dev/vda4
Clearing log and setting UUID
writing all SBs
new 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 | grep namedumpe2fs 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 | grep nameFilesystem volume name:   vbird_ext4[root@study ~]# mount LABEL=vbird_ext4 /data/ext4

转载于:https://my.oschina.net/tucci/blog/1476527

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

  1. linux对磁盘进行分区_如何在Linux中对磁盘进行分区

    linux对磁盘进行分区 在Linux中创建和删除分区是一种常规做法,因为在使用存储设备(如硬盘驱动器和USB驱动器)之前,必须先对其进行某种结构化. 在大多数情况下,大型存储设备被分为称为parti ...

  2. linux添加硬盘及分区格式化

    最近要给小伙伴们写几篇文章,关于<linux下误删除文件之后该如何恢复>.对于没有进程占用的文件想要进行数据恢复,不同的文件系统格式需要使用不同的工具,比如:ext4.xfs等.我找遍了我 ...

  3. Linux创建磁盘并分区命令

    Linux创建磁盘并且分区命令 目录 1.首先创建磁盘 1.1 首先点击虚拟机,再点设置 1.2点击内存在点下面的磁盘添加 1.4 添加磁盘向导 2.创建磁盘分区 2.1 启动Linux,用超级管理员 ...

  4. (转载)Linux新增磁盘、分区、格式化和自动挂载

    原文链接:http://blog.csdn.net/xyang81/article/details/51745683 系统环境:CentOS7 64位 mini版 场景:在虚拟机中添加一块40G的SC ...

  5. linux实验------对磁盘进行分区格式化挂载

    文章目录 step1 step2 step3 step4 step5 step1 为虚拟机添加1块大小为20G的硬盘sdb,将该硬盘划分1个主分区和两个逻辑分区. 打开虚拟机设置进行如下操作: **f ...

  6. linux分区文件 pe,关于linux的磁盘和分区的操作(一)

    由于我装的linux(centos)在虚拟机里,开始分的磁盘空间太小,我就想添加一块新的磁盘,顺便学习学习linux的磁盘操作,下面先贴点关于linux分区的知识 分区概念首先我们需要知道,硬盘分区的 ...

  7. Linux系统磁盘与分区管理

    Linux最传统的磁盘文件系统(filesystem)使用的是EXT4格式,所以要了解文件系统就得要由认识EXT4开始,而文件系统是创建在硬盘上面的,因此我们得了解硬盘的物理组成才行,下面我们回来详细 ...

  8. linux+系统的硬盘分区格式化,linux硬盘分区、格式化、挂载超详细步骤

    在linux中增加一块或者多块硬盘来实现扩容或者备份数据,分区.格式化.挂载是不可避免的三个步骤.下面用超详细的步骤介绍如何对一块新的硬盘进行分区.格式化.挂载的操作. 分区→格式化→挂载→使用 [分 ...

  9. Linux之磁盘管理,分区

    1)IO事件的产生 cpu轮循.硬件通知机制 2)识别硬件: 硬件层次: 1.IO端口.缓冲器 2.可编程中断控制设备:设备注册 不同的中断信号 软件/操作系统层次: 命名通过数字或字母 linux一 ...

最新文章

  1. 地铁闸门会夹伤人吗_西安地铁率先推出分类垃圾箱 四种类型你会放吗?
  2. 网站“TDK”中的“D”该如何优化内容?有什么作用?
  3. 大作完成了一部分,陆续往上放吧
  4. 你想过自己注定是个普通人吗?
  5. java做橡皮擦效果_HTML5 canvas橡皮擦擦拭效果
  6. 作者:余超(1993-),男,作者:华东政法大学民商法学硕士生,主要研究方向为民商法。...
  7. 大屏数据可视化综合设计
  8. html中的数字选框,带有复选框和数字类型的HTML表单提交与PHP?
  9. python中while的特点_Python【2】:初入python 用户输入,if,(while 循环)
  10. 拓端tecdat|【视频】R语言生存分析原理与晚期肺癌患者分析案例|数据分享
  11. python得语言编程模式_一图看懂编程语言迁移模式:终点站是Python、Go、JS!
  12. 洛谷P1306 斐波那契公约数
  13. 深刻揭露步态识别的“谎言”(篇一)
  14. BZOJ4874:筐子放球
  15. iphone如何显示实时网速和内存空间
  16. 图形学人物简史:两位图灵奖与奥斯卡得主的图形学研究往事
  17. 《超大流量分布式系统架构解决方案-人人都是架构师2.0》读书笔记
  18. 对RGB三个通道进行操作示例
  19. 实验四 手写数字识别的神经网络算法设计与实现
  20. 第一次做项目经理总结_干货:项目结束后,哪些经验教训要总结?

热门文章

  1. 微信小程序 图片自适应
  2. Oracle创建用户并授权dba权限
  3. 我们能从霓虹国的AI+新药开发中学到什么?
  4. Java-视频管理系统-毕业设计-SpringBoot-VUE-MyBatis
  5. 电脑花屏是屏幕坏了吗_电脑花屏时好时坏怎么回事 电脑花屏时好时坏如何彻底解决...
  6. W3-HTML 基础教程笔记
  7. 单片机在目前的发展趋势
  8. php 给图片增加边框,照片添加多图边框,如何给图片添加场景边框,多种边框模板提供选择...
  9. 时序图 plantuml教程
  10. html图片十字形,在CSS中创建十字形