查看磁盘管理

我们来看下 Centos 7 的磁盘管理,说到磁盘管理,我们第一件感兴趣的是我的服务器现在有多少块磁盘呢?

我们可以通过 vmware 中虚拟机的设置来查看:

centos7查看iscsi磁盘 centos7 查看磁盘信息_数据


从上可以看出,目前这个虚拟机只有一块磁盘,磁盘的大小是 20G 。

我们也可以通过下面的命令来查看磁盘的信息:

fdisk -l

输出如下的信息:

centos7查看iscsi磁盘 centos7 查看磁盘信息_文件系统_02


我们看到上面的信息肯定很懵,感觉存在好几块磁盘似的,这到底是怎么回事呢?我们接下来一步一步的去理解上面的信息,我们从给虚拟机新增一块磁盘开始。

新增磁盘

对于使用 vmware 来管理虚拟机的场景,我们可以通过 vmware 给指定虚拟机添加磁盘,如下:

选定虚拟机,然后右击,点击设置,进入到虚拟机的设置界面:

centos7查看iscsi磁盘 centos7 查看磁盘信息_文件系统_03


然后点击添加,得到如下界面:

centos7查看iscsi磁盘 centos7 查看磁盘信息_centos7查看iscsi磁盘_04


然后选中硬盘,然后点击下一步:

centos7查看iscsi磁盘 centos7 查看磁盘信息_centos7查看iscsi磁盘_05


然后点击下一步:

centos7查看iscsi磁盘 centos7 查看磁盘信息_centos7查看iscsi磁盘_06


然后点击下一步:

centos7查看iscsi磁盘 centos7 查看磁盘信息_文件系统_07


使用默认的 20GB 大小,然后点击下一步:

centos7查看iscsi磁盘 centos7 查看磁盘信息_磁盘分区_08


指定文件名,只要不和当前虚拟机对应的磁盘文件冲突就行,然后点击完成:

centos7查看iscsi磁盘 centos7 查看磁盘信息_磁盘分区_09


可以看出,新增了一个磁盘,然后点击确定即可。

然后重启虚拟机,并且执行命令:

fdisk -l

查看磁盘信息如下:

centos7查看iscsi磁盘 centos7 查看磁盘信息_文件系统_10


这个结果和前面第一次 fdisk 的结果对比,我们发现:新增了一块磁盘 /dev/sdb(在 Linix 中,一切皆文件,所以磁盘也是使用文件来表示的),这个磁盘的大小和我们新增的时候的大小是差不多的

那么我们可不可以推断出,这个虚拟机上一开始的磁盘就是 /dev/sda 呢?答案是肯定的,实际上一开始的那块磁盘就是 /dev/sda,如果你再新增一个磁盘的话,就会有一个文件 /dev/sdc 产生。

那么 /dev/sda1 和 /dev/sda2 又是什么意思呢?要明白这个需要先掌握磁盘分区的知识。

磁盘分区

接下来我们对刚刚新增的磁盘 /dev/sdb 进行磁盘的分区,磁盘分区可以理解成 Windows 系统中的分盘(C盘、D盘、E盘等)。在 Centos 中,我们可以使用 fdisk 进行分区,输入如下的命令:

## 注意:分区前一定要确定好这个磁盘中是没有数据的,因为分区后是需要对这个磁盘进行格式化的
## fdisk 命令后面跟上需要分区的磁盘
fdisk /dev/sdb

输入上面的命令进入如下的交互界面:

centos7查看iscsi磁盘 centos7 查看磁盘信息_文件系统_11


我们可以输入字母 m 进入帮助中心,如下:

centos7查看iscsi磁盘 centos7 查看磁盘信息_centos7查看iscsi磁盘_12


可以发现有一个字母 n 表示新增一个分区,所以我们输入字母 n,进入到如下的界面:

centos7查看iscsi磁盘 centos7 查看磁盘信息_centos7查看iscsi磁盘_13


以上表示分区有两种类型:p 表示主分区,主分区最多只能建立 4 个

e 表示扩展分区,我们可以在扩展分区中建立更多的逻辑分区

所以,如果我们对一个硬盘规划为 4 个分区的话,那么就可以直接建立 4 个主分区了,如果规划超过 4 个分区的话,那么就建立扩展分区,然后在扩展分区上建立逻辑分区。

那么,一般在服务器中,将一块硬盘划分一个分区,所以我们直接可以建立一个主分区,我们输入字母 p,进入到如下的界面:

centos7查看iscsi磁盘 centos7 查看磁盘信息_磁盘分区_14


主分区的编号默认是 1 - 4,你可以创建 4 个主分区,我们现在创建第一个主分区,输入数字 1,进入如下的界面:

centos7查看iscsi磁盘 centos7 查看磁盘信息_数据_15

输入起始扇区的位置,我们可以使用默认的 2048,然后直接回车即可,进入到如下的界面:

centos7查看iscsi磁盘 centos7 查看磁盘信息_文件系统_16


这里是输入结尾的扇区的位置,这一步和上一步就是确定分区的大小,这里就需要计算了,一个扇区的默认大小是 512 字节,所以将结尾的扇区位置减去起始扇区的位置再除以 512 就是这个分区的大小。实际上还有一个很方便选择分区大小的方法,那就是输入 +分区的大小,比如 +10G,表示给这个分区设置 10G 的大小,如下:

centos7查看iscsi磁盘 centos7 查看磁盘信息_centos7查看iscsi磁盘_17


这样分区的大小就设置为 10G 了。现在我们可以输入字母 p 来查看刚刚创建的分区的信息,如下:

centos7查看iscsi磁盘 centos7 查看磁盘信息_数据_18


这样我们就创建了一个名为 /dev/sdb1 的分区,它的大小是 10G。

那么,到现在为止,如果我们不想创建了刚刚创建的分区的话,我们可以输入字母 q 退出,这样就不会保存上面创建分区的信息的。

如果我觉得上面的分区创建的不合适,我们想创建的这个分区使用这个硬盘的全部容量的话,我们可以先输入字母 d 来删除当前创建的分区,如下:

centos7查看iscsi磁盘 centos7 查看磁盘信息_数据_19


这样,刚刚创建分区就被删除了,我们可以接着来创建符合我们需求的分区,如下:

centos7查看iscsi磁盘 centos7 查看磁盘信息_数据_20


以上在选择起始扇区位置和终止扇区位置的时候都直接回车即可。再输入 p 来查看分区:

centos7查看iscsi磁盘 centos7 查看磁盘信息_磁盘分区_21


这样创建的分区的大小就是磁盘的大小 20G 了。这样分区就设置好了,可以通过输入字母 w 来保存并且退出,如下界面:

centos7查看iscsi磁盘 centos7 查看磁盘信息_centos7查看iscsi磁盘_22


到此,分区就创建好了,我们可以通过 fdisk 命令来查看:

输出结果如下:

centos7查看iscsi磁盘 centos7 查看磁盘信息_数据_23


可以看出,磁盘 /dev/sdb 有一个分区 /dev/sdb1。同理:/dev/sda1 和 /dev/sda2 就是磁盘 /dev/sda 的两个分区了。

注意:如果磁盘的大小大于 2T 的话,需要使用命令 parted 来进行分区

至此,磁盘的分区是建好了,那么我们怎么保证我们写的数据能保存到 /dev/sdb1 这个分区上呢?怎么保证我们从这个分区中读取数据呢?接着往下看

前面介绍了磁盘的新增和磁盘分区,最后得到一个磁盘分区,那么现在读写的数据怎么样可以落到这个磁盘分区呢?这里还需要掌握两个知识点:
1.Linux 支持的文件系统
2.挂载

Linux 支持的文件系统

我们是不能直接操作磁盘这种硬件的(磁盘分区也是硬件),需要在磁盘硬件上再盖一层文件系统来管理磁盘。那么 Linux 支持多种文件系统,常见的有:
ext4
xfs
NTFS (需安装额外软件)
那么现在在 Linux 系统之上最流行的文件系统当属 ext4 和 xfs 了,Centos 6 默认的文件系统是 ext4,Centos 7 默认的文件系统是 xfs。
现在我们想使用前面创建的磁盘分区 /dev/sdb1 的话,就需要在这个分区之上盖一层文件系统,我们可以通过下面的命令在磁盘分区上盖一层 ext4 文件系统:

mkfs.ext4 /dev/sdb1

如果是在磁盘分区上盖一层 xfs 的话,可以使用命令:

mkfs.xfs /dev/sdb1

这里我在磁盘分区 /dev/sdb1 上盖一层 ext4 文件系统,如下:

centos7查看iscsi磁盘 centos7 查看磁盘信息_数据_24


出现上面的界面说明文件系统初始化好了,上面的步骤有时我们也称为磁盘分区的格式化

挂载

以上在磁盘分区中盖好了一层文件系统了,如果我们想使用这个文件系统的话,我们还需要将这个文件系统挂载到 Linux 上面的某个文件目录中。
我们先创建一个文件目录用于挂载文件系统:

mkdir /mnt/sdb1

然后使用下面的命令将文件系统挂载到上面的目录中:

mount -t ext4 /dev/sdb1 /mnt/sdb1
## 或者可以使用:
mount -t auto /dev/sdb1 /mnt/sdb1
## 或者简写成
mount /dev/sdb1 /mnt/sdb1

然后可以使用下面的命令来查看挂载的情况:

mount

输出如下:

sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=922420k,nr_inodes=230605,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_prio,net_cls)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/mapper/centos-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime)
mqueue on /dev/mqueue type mqueue (rw,relatime,seclabel)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=30,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=13603)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=186708k,mode=700)
/dev/sdb1 on /mnt/sdb1 type ext4 (rw,relatime,seclabel,data=ordered)

从上面的最后一行可以看出,已经将磁盘分区 /dev/sdb1 的文件系统已经挂载到了文件目录 /mnt/sdb1 中。

这样的话,在 /mnt/sdb1 目录中创建的文件,写入的数据都会落入到磁盘分区 /dev/sdb1 中。

在这里需要注意的一点是,上面的 mount 命令只是会将挂载的信息放在内存中,一旦服务器重启的话,那么挂载的信息就会丢失了,所以我们需要将上面挂载的信息固化到磁盘文件中,我们需要修改下面的配置文件:

vi /etc/fstab

在上面的配置文件中新增如下的一行记录:

/dev/sdb1 /mnt/sdb1 ext4 defaults 0 0

保存上面的内容,这样在开机的时候就会将 /dev/sdb1 挂载到 /mnt/sdb1