Linux挂载新磁盘

Linux挂载新磁盘

前言

当我们在使用Linux服务器或主机的时候,遇到磁盘空间不足的情况,第一反应当然是加一块硬盘到机器上,但是和Windows一样地,在加入了物理硬盘之后,我们还需要手动对硬盘进行格式化(配置文件系统),然后分区等操作才能真正意义上地使用这块硬盘,但Linux和Windows的配置过程还是有很多不同的,因此在这里进行简单的介绍.

检查硬盘

在插入物理硬盘之后,我们要做的第一件事当然是检查机器能否检测到这块硬盘,如果检测不到,则需要检查接口或者硬盘是否存在损坏.检查的方法有以下几种:

  1. sudo fdisk -l
    
  2. lsblk
    

由于df -h只能查看已经挂载了的硬盘及分区信息,因而新插入的硬盘用此命令是无法查看的,所以需要用以上两种方法来查看机器能否检测到你新插入的硬盘.

分区

一般来讲,每块硬盘需要一个主分区(primary partition)和若干个扩展分区(extend partition),分区用fdisk工具即可完成,首先我们需要键入

fdisk /path/to/disk来进入fdisk工具,然后可以输入m来查看其用法,如下:

[root@x86c ~]# fdisk /dev/sdb

Welcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): m

Help:

  DOS (MBR)
   a   toggle a bootable flag
   b   edit nested BSD disklabel
   c   toggle the dos compatibility flag

  Generic
   d   delete a partition
   F   list free unpartitioned space
   l   list known partition types
   n   add a new partition
   p   print the partition table
   t   change a partition type
   v   verify the partition table
   i   print information about a partition

  Misc
   m   print this menu
   u   change display/entry units
   x   extra functionality (experts only)

  Script
   I   load disk layout from sfdisk script file
   O   dump disk layout to sfdisk script file

  Save & Exit
   w   write table to disk and exit
   q   quit without saving changes

  Create a new label
   g   create a new empty GPT partition table
   G   create a new empty SGI (IRIX) partition table
   o   create a new empty DOS partition table
   s   create a new empty Sun partition table

Command (m for help): 

对于一块全新的硬盘,我们可以直接输入n然后按照提示创建新的分区即可,除一个主分区外,可以根据需要创建0个或若干个扩展分区,并设定扇区数来确定每个分区的容量,完成后输入w回车保存分区信息并退出.而对于一块旧的硬盘,可能上面已经存在分区信息,此时我们可以先输入p来查看已有的分区信息,接着输入d按照提示来删除已有的分区,删除所有分区后用F查看未分区的空间信息,如果硬盘的所有空间都归为一个整体,则说明分区已经删除完毕,此时再输入n来创建新的分区,之后输入w保存并退出.如果有多块硬盘重复以上操作即可.分区完成后,可以再用lsblk -f查看硬盘信息,如果硬盘的分区状况和你设定的一样,则说明分区已经创建成功了.

格式化(创建文件系统)

分区创建完成后自然就是要进行文件系统的格式化,格式化的命令非常简单,即mkfs(make filesystem)这个命令,这个命令其实是一个综合命令,它会去调用正确的文件系统格式化工具软件,可以通过mkfs -t filetype的方式来格式化为特定的文件系统.同时我们可以通过mkfs[tab][tab]的方式来显示系统支持哪些文件系统的格式化功能,如:

[root@x86b home]# mkfs
mkfs         mkfs.cramfs  mkfs.ext2    mkfs.ext3    mkfs.ext4    mkfs.fat     mkfs.minix   mkfs.msdos   mkfs.vfat    mkfs.xfs 

如果你使用mkfs -t ext4命令,则实际上mkfs会自动帮你调用mkfs.ext4工具及其相关的参数来进行硬盘的格式化,CentOS7默认的文件系统是xfs,因此将文件系统格式化为xfs的方式就有以下两种:

mkfs.xfs -f /dev/sda
mkfs -t xfs /dev/sda

如果需要格式化为ext4等文件系统也是采用相同的方法.

挂载

在Linux系统中,用户不能直接访问硬件设备,需要将硬件设备挂载到系统目录上才可以 ,因此我们需要将格式化后的分区挂载到具体的目录下.此时这个目录就成为了进入磁盘分区(其实是文件系统)的入口,不过在进行挂载之前,需要对以下几点有一个清晰的认知:

  • 单一文件系统不应该被重复挂载在不同的挂载点(目录)下
  • 单一目录下不应该重复挂载多个文件系统
  • 要作为挂载点的目录,理论上应该都是空目录才行.
  • 挂载的最小单元是分区而非硬盘

后面两点尤其重要,如果你要用来挂载的目录里面并不是空的,那么挂载了文件系统之后,原目录下的东西就会暂时地消失,但它们并不是被覆盖掉了,而是暂时地隐藏了起来,等到新的分区被卸载之后,此目录下原来的文件就会再次显现出来

临时挂载

常用的两种挂载方式为:

#此例中分区名为/dev/sda,挂载点为/mnt
mount /dev/sda /mnt
mount UUID='xxxx' /mnt

以上两种方式都可以实现临时挂载,但严谨一点来说UUID的挂载方式更不容易出错,因为sda,sdb等排序是系统根据硬盘的插槽来确定的,和硬盘本身实际上并没有关系,此时若不小心将多块硬盘插错了位置,则可能会挂载到错误的目录下,但UUID是唯一的,可以准确地标识一个分区,因此是更推荐这种方法的,至于查看UUID的方法也有许多,如

[root@x86b home]# blkid
/dev/mapper/cs-root: UUID="124332f7-2cc7-479f-84d2-e8811605774e" BLOCK_SIZE="512" TYPE="xfs"
[root@x86b home]# lsblk -f
NAME        FSTYPE      LABEL UUID                                   MOUNTPOINT
sda                                                                  
├─sda1      xfs               f7257152-e114-4576-a376-8dda7fd28409   /boot
└─sda2      LVM2_member       dJUBpL-fhYG-M0fS-FltG-2fHT-E6er-asQ33D 
  ├─cs-root xfs               124332f7-2cc7-479f-84d2-e8811605774e   /
  ├─cs-swap swap              0879fc04-225e-408a-94e6-a6e141d353f1   [SWAP]
  └─cs-home xfs               3b27cf54-074d-4a55-8976-72be6188dfed   /home

永久挂载

对于U盘,光盘等媒体来说,临时挂载是非常有用的,但对于硬盘这种常驻于机器中的物件,临时挂载就显得不是很人性化,它在机器重启之后挂载就会消失,我们又需要重新挂载才能使用,此时我们当然希望系统能够在每次启动的时候自动进行挂载,这时就需要修改/etc/fstab(filesystem table)文件,我们将fstab文件中的挂载 称为系统挂载.在说明如何进行系统挂载之前,我们首先要了解一些系统挂载的限制:

  • 根目录 / 是必须挂载的,而且一定先于其他挂载点被挂载进来
  • 其他挂载点必须为已经建立好的目录,可任意指定,但一定要遵守必需的系统目录架构原则(FHS)
  • 所有挂载点在同一时间之内,只能挂载一次
  • 所有硬盘分区在同一时间之内,只能挂载一次
  • 如果进行卸载,则必须要先将工作目录转移到挂载点(及其子目录)之外,才能够进行卸载.

我们用vim /etc/fstab来打开这个文件,可以看到如下的内容:

/dev/mapper/cs-root     /                       xfs     defaults        0 0
UUID=f7257152-e114-4576-a376-8dda7fd28409 /boot                   xfs     defaults        0 0
UUID=7d815fe4-16c4-40fc-bf95-3a4a2cf0db65 /datapool/disk1         xfs     defaults        0 0

我们要修改此文件来添加一个新的分区进去,那么我们首先得搞清楚这六列分别代表着什么含义,这六个字段的含义分别为:

[分区名/UUID等]  [挂载点]  [文件系统类型] [文件系统参数]  [dump]  [fsck]
  1. 第一栏:磁盘设备文件名/UUID/LABLE名

    这个字段可以填写的数据主要有如下三个项目:

    • 文件系统或磁盘的设备文件名,如/dev/sda1等
    • 文件系统的UUID名称,如UUID=xxxx
    • 文件系统的LABEL名称,如LABEL=xxxx

    尽管以上三种都可以使用,但仍然比较推荐使用UUID,原因前面已经叙述过了,找不到UUID的话记得用blkid或者lsblk -f来查看UUID

  2. 第二栏:挂载点

    即一个空目录,前面也已经详述过了

  3. 第三栏:磁盘分区的文件系统

    虽然现在挂载时我们不需要加上-t 文件系统类型来说明要挂载分区的文件类型,因为系统会自动测试挂载,但在fstab文件中,我们必须要手动写入文件系统的类型才行,包括xfs,ext4,vfat,reiserfs,nfs等

  4. 第四栏:文件系统参数

    mount命令有许多文件系统参数,这个参数就是写在这个字段,主要包含一下的内容:

    参数 内容意义
    async/sync 设置磁盘是否以异步方式 运行,默认为async(性能较佳)
    auto/noauto 当执行mount -a时,此文件系统是否会被自动测试挂载,默认为auto
    rw/ro 让该分区以可读写或只读的状态挂载上来,如果设置为只读,则无论文件系统中的文件是否设置w权限,都无法写入.
    exec/noexec 让该分区以可执行或不可执行的状态挂载上来,和rw/ro是同样的原理
    user/nouser 是否允许用户使用mount命令来挂载此文件系统,一般而言,我们当然不希望一般身份的user使用,因此默认为nouser
    suid/nosuid 该文件系统是否允许SUID的存在,默认为suid,如果不是执行文件的放置目录,也可以设置为nosuid来取消这个功能
    defaults 同时具有rw,suid,dev,exec,auto,nouser,async等参数,基本上,默认情况使用defaults进行设置即可
  5. 第五栏:能够被dump备份命令作用

    dump是一个用来作为备份的命令,不过现在有太多的备份方案,因此这一项可以不予理会,直接输入0就好

  6. 第六栏:是否以fsck检验扇区

    早期启动的流程中,会有一段时间去检验本机的文件系统,看看文件系统是否完整,这个阶段主要是通过fsck去完成,但现在常用的xfs文件系统无法适用,因为xfs会自己进行检验,不需要额外进行操作,因此直接填0就可以.

结语

我们实际在插入新硬盘后,只需要按照文中所述的检查硬盘-分区-格式化-临时挂载-永久挂载几步按部就班地操作即可,并不是非常复杂,文中赘述了许多内容,虽然与实际操作无关,但有助于读者更好地理解每一步的含义,知晓每个命令的作用,便于记忆.

参考

鸟哥的Linux私房菜 基础学习篇(第四版) 7.3.3, 7.3.5, 7.3.6,7.4.1节

Linux之挂载新的硬盘(超详细!)

玩转 Linux 之:磁盘分区、挂载知多少?

posted @ 2023-02-17 09:42  yukina~  阅读(1477)  评论(0编辑  收藏  举报