Linux

linux磁盘挂载、分区、格式化

我们使用一个linux磁盘大概可以分为三步:

  • 添加硬盘/新建分区(fdisk)。(注:新建分区是非必须的。)
  • 格式化分区(mkfs.ext4)。
  • 挂载(加载分区mount)

1、添加硬盘,新建分区(fisk)


fdisk 是一款功能强大的分区工具,也是目前在Unix类操作系统中最流行的工具之一;分区工具老字号。(使用man fdisk)

(1)查看当前系统所有硬盘及分区情况:fdisk -l

    使用命令
    sudo fdisk -l
1、vda 代表是系统盘,是40G

2、vda1 代表系统盘分了几个区,数字往后递增,我这里就分了一个区,所以是vda1

3、vdb 代表硬盘,是300G

4、vdb1 代表的是硬盘分区

通过上图的fdisk -l的信息,我们知道此机器中挂载五个硬盘(或移动硬盘),分别是vda、vdb、vdc、vdd、vde;如果我们想查看单个硬盘情况,可以通过 fdisk /dev/vda或者fdisk /dev/vdb 来操作;/dev/vda下的/dev/vda1是vda的主分区,分区中还有扩展分区和逻辑分区的概念,在此不做扩展。

关于fdisk -l 一些数值的说明,以上图的/dev/vde为例。

Disk /dev/vde: 32.2 GB, 32212254720 bytes, 62914560 sectors #扇区个数
Units = sectors of 1 * 512 = 512 bytes  #柱面单元大小 (一个扇区作为一个柱面)
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
a. 总磁盘大小: 32212254720 bytes(B) / 1024 = 104857600 KB / 1024 = 102400 MB / 1024 = 30 GB

b. 每个柱面的大小Units: 512 bytes (这里一个柱面一个扇区)

c. 扇区个数是sectors: 32212254720 bytes / 512 bytes = 62914560

(2)在指定的硬盘(例:/dev/vda)上创建分区,命令为:fdisk /dev/vda1 , 根据提示进行下一步操作,如:查看帮助(h),新建分区(n),删除分区(d),查看分区情况(p),分区成功后,写分区表并退出(w)

2、格式化分区(mkfs.ext4)


格式化分区的是指将分区格式化成不同的文件系统。
什么是文件系统?文件系统指操作系统用于明确存储设备或分区上的文件的方法和数据结构:即在存储设备上组织文件的方法。就好比一个教室,同学们的坐的位置总是与桌子凳子排列的方式有关系。桌子,凳子怎么摆放,就导致了同学坐的位置在哪里。文件系统存放数据也是这么个道理。Linux下的文件类型有ext2、ext3、ext4、xfs等等。
假设我们要对/dev/vbd进行格式化(注:此处/dev/vbd没有分区,分区是非必须的),我们需要使用命令:

mkfs.ext4 /dev/vbd
意思是格式化/dev/vbd,格式化类型为.ext4, mkfs.ext4支持一些参数,具体用法可参考:https://blog.csdn.net/tsz0000/article/details/85719204

比如我们项目中用到的:

#mkfs.ext4 -F /dev/vdb -m 0 -q -L gpt -J size=4096 -T largefile -i 16384
其中:

-F  强制格式化,有些mkfs工具版本格式化时检测到已有文件系统数据会提示继续进行的选择。

-m reserved-blocks-percentage。指定预留block总个数的百分比。

-q    执行时不显示任何信息。

-L volume-label。 设置文件的卷标。还可以使用e2label命令进行设置卷标:e2label /dev/sdb1 test。那么怎么查看卷标是否生效?e2label /dev/vdd?

-J journal-options。size=journal-size    指定日志文件大小,默认单位MB,此处表示size=4096 表示日志文件大小为4G。如果这个值大于磁盘大小,在执行mkfs.ext4时,则会报错:Journal size too big for filesystem.

-T fs_types。largefile    存储大文件,文件单位1MB,默认情况下blocks是inodes的4倍,存储基本单位是block 4k,意思就是全部存储16K单位文件inodes可以最大限度把blocks用完。

-i bytes-per-inode。 指定"字节/inode"的比例  。

我们格式化好的/dev/vdd能用吗?答案是不能,要想用这个磁盘我们还需要挂载。

3、挂载


linux系统的宗旨是一切皆文件。比如我们想要我们的文件存储在/disk1目录下,/disk1就是我们的根,那么我们要在/dev/vdd中写入文件时,首先要/disk1和/dev/vdd建立联系,这个就是挂载。这样,之后我们访问/disk1这个目录时,我们实际上访问的是/dev/vdd这个设备文件。这个目录相当于/dev/vdd的入口,有了这个入口才可以访问磁盘。z将指定的一个目录作为挂载点目录时,如果挂载点的目录有文件,那么文件会被隐藏。因此当我们需要挂载目录时,最好新建一个空文件夹来作为挂在点目录。

比如此处命令应为:

mount /dev/vdd /disk1 

mount命令还支持一些参数,具体可参考:EXT4文件系统 mount 参数翻译

我项目中的用法:

mount -o rw,nodiratime,noatime,data=writeback,nobarrier,lazytime,delalloc /dev/vdd /disk1

执行完之后,怎么怎样查看到当前系统上所有磁盘的挂载信息?

(1)mount命令。

#mount|grep vd
/dev/vda1 on / type ext4 (rw,relatime,data=ordered)
/dev/vda1 on /home/plugins type ext4 (rw,relatime,data=ordered)
/dev/vda1 on /home/overlay type ext4 (rw,relatime,data=ordered)
/dev/vde on /disk1 type ext4 (rw,noatime,nodiratime,lazytime,nobarrier,data=writeback)

(2)df -h命令。信息显示的内容包括文件的大小,已经使用的分区大小,总共可用分区的大小,使用率,以及挂载的位置,是比较常用的用法。

#df -h|grep vd
/dev/vda1        59G   15G   42G  26% /
/dev/vde         26G  334M   26G   2% /disk1

另外blkid命令可以查看对应分区的UUID(编号)。UUID唯一标识每一个分区,防止错误的挂载。除此之外,还会显示分区的类型。

#blkid
/dev/vde: LABEL="gpt" UUID="c779e832-6dde-4d11-8e44-7451119dda9d" TYPE="ext4" 

以上,我们这种挂载方式为临时挂载,因此当我们重启了Linux后,这种挂载会失效的。怎么做到永久挂载呢?

方法:

①使用vim编辑 /etc/fstab ,在命令行直接输入vim /etc/fstab 就可以编辑,实现开机自动挂载。

②在将光标移到UUID行,在命令模式下按o键进入插入模式,同时换行。将/dev/vdd的UUID编号,粘贴进来。/disk1挂载点目录,ext4文件系统类型,后面的rw,nodiratime,noatime,data=writeback,nobarrier,lazytime,delalloc,是执行mount命令时,-o后面的参数。编写完成后文件的内容如下:

#vi /etc/fstab 
# /etc/fstab
# Created by anaconda on Fri Jun  2 08:12:44 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=0559cb97-8399-4656-a928-2d2211064424 /                       ext4    defaults        1 1
/swapfile     none    swap    sw    0   0
UUID=c779e832-6dde-4d11-8e44-7451119dda9d /disk1     ext4   rw,nodiratime,noatime,data=writeback,nobarrier,lazytime,delalloc

总结


当我们完成上面的操作后,/disk1目录下多出了一个目录lost+found。那么这个目录是做什么的呢?
lost+found:顾名思义,丢失然后找到。它是一个特殊的目录,用来存放文件系统错误导致文件丢失的目录,因此我们的一些数据是可以通过它来找到的。这个目录是在分区的根目录上,就是我们挂载的分区。

相关linux命令总结:


参考:https://blog.csdn.net/a1766855068/article/details/84942745