文档章节

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

大数据之路
 大数据之路
发布于 2014/07/13 01:24
字数 4379
阅读 17513
收藏 55
点赞 3
评论 3

上周在做日志机扩容的时候,发现运维同学将一块硬盘的挂载点没有同以前的日志机保持一致,考虑到这会给日后的维护带来麻烦,于是尝试着手修改,在修改的同时,review 了下之前日志机的挂载配置,发现居然存在随时掉坑的可能。。。至于什么坑,我会在文末说明。

so,感觉这事儿虽然简单,也许一条命令就搞定的事情,但是,很多童鞋可能不明就里,纯复制粘贴网上的命令,这很容易给人挖坑埋雷,今天就来聊聊 linux 下磁盘分区、挂载的问题,篇幅所限,不会聊的太底层,纯当科普吧~

1、Linux 分区简介

1.1 主分区 vs 扩展分区

硬盘分区表中最多能存储四个分区,但我们实际使用时一般只分为两个分区,一个是主分区(Primary Partion)一个是扩展分区(extended partition),主分区可以马上被使用但不能再分区,扩展分区必须再进行分区后才能使用,也就是说它必须还要进行二次分区。那么由扩展分区再分下去的是什么呢?它就是逻辑分区(Logical Partion),逻辑分区没有数量上限制。 

1.2 驱动器标示的含义

对习惯于使用Dos或Windows的同学来说,有几个分区就有几个驱动器,并且每个分区都会获得一个字母标识符,然后就可以选用这个字母来指定在这个分区上的文件和目录,它们的文件结构都是独立的,非常好理解。然而对Red Hat Linux新手来说,可就有点恼人了。因为对Linux用户来说无论有几个分区,都得分给目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构。Red Hat Linux中每个分区都是用来组成整个文件系统的一部分,因为它采用了一种叫“挂载点”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区就在linux的存储空间的某个目录下获得。
下面我们先来看看Red Hat Linux的驱动器是如何标识的。 对于IDE硬盘,驱动器标识符为“hdx1”,其中“hd”表明分区所在设备的类型,这里是指IDE硬盘了。“x”为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),“1”代表分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。例,hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。对于SCSI硬盘则标识为“sdx1”,SCSI硬盘是用“sd”来表示分区所在设备的类型的,其余则和IDE硬盘的表示方法一样,不再赘述。
我们从上面可以看到,Red Hat Linux的分区是不同于其它操作系统分区的,它的分区格式常用的有Ext3和Swap两种,Ext3用于存放系统文件,Swap则作为Red Hat Linux的交换分区(相当于windows中的虚拟内存文件)。那么现在我们就可以知道Red Hat Linux至少需要两个专门的分区(Linux Native(本地)和Linux Swap(交换))。由于不能将Red Hat Linux安装在Dos/Windows分区。一般来说我们将Red Hat Linux安装一个或多个类型为“Linux Native”的硬盘分区,但是在Red Hat Linux的每一个分区都必须要指定一个“Mount Point”(挂载点),告诉Red Hat Linux在启动时,这个目录要给哪个分区使用。对“Swap”分区来说, 一般也定义一个,且它不必要定义载入点。
下面我们先对“Linux Native”和“Linux Swap”有个初步的了解。

  • SWAP分区是LINUX暂时存储数据的交换分区,它主要是把主内存上暂时不用得数据存起来,在需要的时候再调进内存内,且作为SWAP使用的分区不用指定“Mout Point”(载入点),既然它作为交换分区,我们理所当然应给它指定大小,它至少要等于系统上实际内存的量,一般来说它的大小是内存的一至两倍。另外你也可以创建和使用一个以上的交换分区,最多16个。
  • Linux Native是存放系统文件的地方,一般用EXT3的分区类型,对Red Hat Linux来说,有了较大的选择余地,可以把系统文件分几个区来装(必须要说明挂载点),也可以就装在同一个分区中(挂载点是“/”)。

1.3 为什么要自定义多个分区?

分多个区有以下几个目的:

  • 在不损失数据的情况下重装系统,比如独立设置/home挂载点,重装系统的时候直接标记回/home,数据不会有任何损失。
  • 针对不同挂载点的特性分配合适的文件系统以合理发挥性能,比如对/var使用reiserfs,对/home使用xfs,对/使用ext4。
  • 针对不同的挂载点开启不同的挂载选项,如是否需要即时同步,是否开启日志,是否启用压缩。
  • 大硬盘搜索范围大,效率低
  • 磁盘配额只能对分区做设定
  • /home、/var、/usr/local 经常是单独分区,因为经常会操作,容易产生碎片

2、挂载点目录简介

2.1 常见的挂载目录结构

每块硬盘都分为若干个分区,每个分区都有自己的文件系统。Windows为这些文件系统各自指定了一个字母。不过 GNU/Linux 使用唯一的树形结构来管理文件,而每个文件系统都挂载于树形结构的某个位置。
正如 Windows 需要有 C: 驱动器一样,GNU/Linux 必须能够将根文件系统挂载于文件树的根(/)上。当根挂载完成之后,您就可以将其它文件系统挂载于树形结构各种挂载点上。根结构下的任何目录都可以作为挂载点,而您也可以将同一文件系统同时挂载于不同的挂载点上。
挂载点实际上就是linux中的磁盘文件系统的入口目录
Linux文件系统结构.jpg

2.2 常见的挂载目录说明

目录    内容 

/   根目录,存放系统命令和用户数据等(如果下面挂载点没有单独的分区,它们都将在根目录的分区中)  
/boot    boot loader 的静态链接文件,存放与Linux启动相关的程序
/home    用户目录,存放普通用户的数据
/tmp    临时文件
/usr    是Red Hat Linux系统存放软件的地方,如有可能应将最大空间分给它
/usr/local 自已安装程序安装在此
/var    不断变化的数据,服务器的一些服务、日志放在下面。
/opt    (Option可选的)附加的应用程序软件包 

/bin    基本命令执行文件 
/dev    设备文件 
/etc    主机特定的系统配置 
/lib    基本共享库以及内核模块 
/media    用于移动介质的挂载点 
/mnt    用于临时挂载文件系统或者别的硬件设备(如光驱、软驱) 
/proc    系统信息的虚拟目录(2.4 和 2.6 内核),这些信息是在内存中,由系统自己产生的。 
/root    root 用户的目录 
/sbin    基本系统命令执行文件 
/sys    系统信息的虚拟目录(2.6 内核) 
/srv    系统提供的用于 service 的数据
/usr/X1186         X-Windows目录,存放一些X-Windows的配置文件
/usr/include      系统头文件,存储一些C语言的头文件
/usr/src           Linux内核源代码,Linux系统所安装的内核源代码都保存在此
/usr/bin          对/bin目录的一些补充
/usr/sbin        对/sbin目录的一些补充
/lost+found 这个目录在大多数情况下都是空的。但是如果你正在工作突然停电,或是没有用正常方式关机,在你重新启动机器的时候,有些文件就会找不到应该存放的地方,对于这些文件,系统将他们放在这个目录下。
/boot: 必须总是物理地包含 /etc、/bin、/sbin、/lib 和 /dev,否则您将不能启动系统。
/home:每个用户将放置他的私有数据到这个目录的子目录下。
/tmp: 程序创建的临时数据大都存到这个目录。
/usr:包含所有的用户程序(/usr/bin),库文件(/usr/lib),文档(/usr/share/doc),等等。
/var:所有的可变数据,如新闻组文章、电子邮件、网站、数据库、软件包系统的缓存等等,将被放入这个目录。这个目录的大小取决于您计算机的用途,但是对大多数人来说,将主要用于软件包系统的管理工具。如果做服务器的话空间应尽量大。我的服务器的实际分法及实际使用的大小,还没有实际投入使用。所以/var目录没有用那么多。一般WEB存放网页的目录是/var/www,postfix邮件的存放邮件的目录是:/var/mail,var/log,是系统日志记录分区, /var/spool:存放一些邮件、新闻、打印队列等。
/opt:存放可选的安装的软件。

上面介绍了几个挂载点,一般来说我们最少需要两个分区(当然只要一个 / 分区也可以),需要一个SWAP分区,和一个“/”分区,但把一些常用、重要的挂载点分到其它分区,这样便于管理。一般一个/分区,一个/usr分区,一个/home 分区,一个/var/log分区。当然这没有什么规定,完全是依照需要来定的。我们可以使用Red Hat Linux提供的硬盘管理工具Disk Druid来完成分区和挂载点设置。

对照上图和目录简介,可以把Linux系统的挂载点想象成一棵大树
/ 为大树的树根
/ 衍生的其他挂载点为这颗大树的树枝
挂载点下的文件为树叶

2.3 为什么 linux 的分区需要有挂载这个动作呢?

如果你看过我之前写的 Linux 系列文章,那么应该记得我曾经标红过一句话:linux 下一切皆文件!换言之就是linux操作系统将系统中的一切都作为文件来管理。在windows中我们常见的硬件设备(打印机、网卡、声卡...)、磁盘分区等,在linux中统统都被视作文件,对设备、分区的访问就是读写对应的文件。

3、实战分区挂载

3.1 临时挂载

举个栗子,原来分区情况如下:

[root@sg-sl-data]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              20G  5.6G   13G  31% /
/dev/sda6             996M   35M  910M   4% /data
/dev/sda5             426G  199M  404G   1% /disk1
/dev/sda1             996M   46M  899M   5% /boot
tmpfs                 7.9G     0  7.9G   0% /dev/shm

3.1.1 先卸载分区:

umount /disk1
umount /data

3.1.2 再重新挂起来:

mount /dev/sda5 /data
mount /dev/sda6 /disk1
注意:如前所述,不能2个分区同时挂载到/data

3.2 永久挂载:开机自动挂载

上面步骤中的方法只是临时工干的活儿,开机后磁盘分区会不可见或者还是挂载之前的模样,要想永久生效,还需要修改/etc/fstab,

LABEL=/data             /data                   ext3    defaults        1 2
LABEL=/disk1            /disk1                  ext3    defaults        1 2
修改为:
/dev/sda5             /data                   ext3    defaults        1 2
/dev/sda6            /disk1                  ext3    defaults        1 2

说明:fstab 是文件系统分配表的配置文件,该文件有着严格的语法格式限制,类似 crontab 一样,保存时也会对你的输入格式进行校验,请慎重使用,否则会有意想不到的问题发生。其一共有 6 个字段,空格分隔,具体每个字段的含义请参考这里,不再赘述:http://diamonder.blog.51cto.com/159220/282542

3.3 以下是添加硬盘&分区&挂载(高危操作,新手慎用!)

友情提示:分区操作是高危操作,尤其是新手同学请勿在生产环境随意尝试,否则后果自负! 

更为详细的分区教程请参见:

linux磁盘分区fdisk命令详解  http://linux008.blog.51cto.com/2837805/548711

fdisk /dev/sdb
 
输入m---n---p---1--回车---回车---p---w
 
mkfs.ext3 /dev/sdb1
 
mkdir /disk2
 
mount /dev/sdb1 /disk2/
 
在/etc/fstab中添加:
/dev/sdb1            /disk2                  ext3    defaults        1 2

4、通过 fstab 设置开机挂载的坑

fstab 文件大家都很熟悉,Linux 在启动的时候通过 fstab 中的信息挂载各个分区,一个典型的分区条目就像这样:

/dev/sdb4 /mnt/usb vfat utf8,umask=0 0 0

/dev/sda4 为需要挂载的分区,sda4 是 Linux 检测硬盘时按顺序给分区的命名,一般来讲,这个名称并不会变化,但是如果你有多块硬盘,硬盘在电脑中的顺序变化的时候,相同的名称可能代表着不同的硬盘分区,如果你是从 USB 设备启动,与其他 USB 设备的插入顺序也会导致分区识别的困难。

因此上面 3.2 小节中的配置直接写 /dev/sda6 是有很大的隐患的,重启后硬盘的顺序可能发生变化,比如 你把 nginx 的用户日志放在一个单独的分区上,那么重启后虽然设置了 fstab,但是由于顺序变了相同的分区号可能代表不同的硬盘分区了,这样就会导致某些分区上的数据服务不可用了。

(PS:文章开头说过在 review 以前同学的挂载配置的时候发现了埋下的一个雷,正是上面的问题。)

这个时候 UUID 就派上用场了,UUID 全称是 Universally Unique Identifier,也就是说,每个分区有一个唯一的 UUID 值,这样就不会发生分区识别混乱的问题了。

在 fstab 中用 UUID 挂载分区,看起来向这样:
UUID=1234-5678 /mnt/usb vfat utf8,umask=0 0 0
在 UUID= 后面填入分区相应的 UUID 值,就可以正确挂载分区了。
那么,我们如何知道一个分区的 UUID 呢?
有 3 种方法:

4.1 通过浏览 /dev/disk/by-uuid/ 下的设备文件信息

# ls -l /dev/disk/by-uuid/
------
lrwxrwxrwx 1 root root 10 10-13 09:14 0909-090B -> ../../sdb5
lrwxrwxrwx 1 root root 10 10-13 09:13 7c627a81-7a6b-4806-987b-b5a8a0a93645 -> ../../sda4
..... 

4.2 通过 vol_id 命令

# vol_id /dev/sdb5
ID_FS_USAGE=filesystem
ID_FS_TYPE=vfat
ID_FS_VERSION=FAT32
ID_FS_UUID=0909-090B
ID_FS_UUID_ENC=0909-090B
ID_FS_LABEL=SWAP
ID_FS_LABEL_ENC=SWAP
ID_FS_LABEL_SAFE=SWAP

4.3 通过 blkid 命令

# blkid /dev/sdb5
/dev/sdb5: LABEL="SWAP" UUID="0909-090B" TYPE="vfat"
通过这三种方法都可以获得分区的 UUID,UUID 依据分区不同,长度和格式都不相同。

比如我最后把 /dev/sdb 挂载在了 /data1 目录下(不放心的话重启或者生成文件测试下,看挂载分区的空间被占用没):

文件系统       类型   容量  已用  可用 已用% 挂载点
/dev/sda3      ext4   518G  2.7G  489G    1% /
tmpfs          tmpfs   16G     0   16G    0% /dev/shm
/dev/sda1      ext4  1008M   61M  896M    7% /boot
/dev/sdb       ext4   1.8T  1.1G  1.7T    1% /data1

grep -v '#' /etc/fstab |column -t
UUID=0c685e8b-dbb3-4a1c-a106-3f1716ab34dd  /         ext4    defaults,noatime              1  1
UUID=2d7f1bcf-06d1-486e-87df-404ba670fcd9  /boot     ext4    defaults,noatime              1  2
UUID=248e7a99-b459-4800-bbd3-354047e49a2f  swap      swap    defaults,noatime              0  0
tmpfs                                      /dev/shm  tmpfs   defaults,nosuid,noexec,nodev  0  0
devpts                                     /dev/pts  devpts  gid=5,mode=620                0  0
sysfs                                      /sys      sysfs   defaults                      0  0
proc                                       /proc     proc    defaults                      0  0
UUID=870ebaf6-727f-48d3-b60c-f203339d94ac  /data1    ext4    defaults,noatime              0  0

5、FAQ:

  • 挂载点必须是一个目录。
  • 一个分区挂载在一个已存在的目录上,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用。对于其他操作系统建立的文件系统的挂载也是这样,卸载后,目录以前的文件都还在,不会有任何丢失。
  • 目录只占磁盘里的一个inode,存放文件属性等信息。
  • 任何一个分区都必须挂载到某个目录上。
  • 目录是逻辑上的区分。分区是物理上的区分。
  • 磁盘Linux分区都必须挂载到目录树中的某个具体的目录上才能进行读写操作。
  • 根目录是所有Linux的文件和目录所在的地方,需要挂载上一个磁盘分区。
  • 一个分区可以挂在多个目录,但反过来一个目录只能是一个分区的挂载点。

6、refer:

[1] Linux入门笔记之一:系统分区及挂载点  http://newthink.blog.51cto.com/872263/223795/

[2] 挂载点  http://wiki.linuxdeepin.com/index.php?title=%E6%8C%82%E8%BD%BD%E7%82%B9

[3] 什么叫“挂载”,“挂载点”?linux文件系统中的概念  http://bbs.csdn.net/topics/380197703

[4] Linux文件系统简介  http://alicsd.iteye.com/blog/816268

[5] 第八章、Linux 磁盘与文件系统管理  http://vbird.dic.ksu.edu.tw/linux_basic/0230filesystem.php

[6] /etc/fstab 详解  http://diamonder.blog.51cto.com/159220/282542         http://dikar.iteye.com/blog/361659

[7] 如何在CentOS下使用fdisk添加新硬盘  http://343308530.blog.51cto.com/7202597/1251558

[8] 多硬盘分区管理fdisk  http://blog.fens.me/linux-fdisk/

© 著作权归作者所有

共有 人打赏支持
大数据之路
粉丝 1476
博文 501
码字总数 342513
作品 0
武汉
架构师
加载中

评论(3)

DkSortfy
DkSortfy
大神你好
大数据之路
大数据之路

引用来自“疯狂的小企鹅”的评论

确定linux逻辑分区没限制?不是ide59个,stat11个吗
理论上是没有限制的,但 BIOS 和 OS 通常有不同的限制:http://unix.stackexchange.com/questions/5730/whats-the-limit-on-the-no-of-partitions-i-can-have
疯狂的小企鹅
疯狂的小企鹅
确定linux逻辑分区没限制?不是ide59个,stat11个吗
Ubuntu 16.04开机自动挂载硬盘分区(转)

说明:如果挂载以前旧硬盘分区时不需要第2、3步! 1、查看Linux硬盘信息: sudo fdisk -l 2、格式化新硬盘(很危险,注意操作时确定硬盘分区的位置): sudo mkfs.ext4 /dev/sdb1 3、创建/da...

easonjim ⋅ 2017/08/29 ⋅ 0

linux下磁盘挂载与查看

df 查看系统分区和使用情况 使用方法: df -h (自动按照大小做单位适应显示) df -i (查看iNode使用情况) free 查看swap分区使用情况 du 查看指定的目录大小(占用空间的大小) 使用方法:...

技术小阿哥 ⋅ 2017/11/27 ⋅ 0

磁盘格式化-磁盘挂载-增加swap

磁盘格式: win支持:NTFS,fat格式 linux支持:xfs,ext4,ext3,ext2,vfat等(cat /etc/filesystems) mount:查看分区文件系统格式 mke2fs:格式化,mke2fs -t ext4 -b2048 /dev/sdb1 (...

ZHENG-JY ⋅ 06/16 ⋅ 0

Linux 存储结构与磁盘划分

主要常见的目录定义 /boot 开机所需文件----内核,开机菜单及所需配置文件 /dev 任何设备与接口都以文件形式存放在这目录 /etc 配置文件 /home 用户主目录 /bin 单用户维护模式下还能够被操作...

技术小阿哥 ⋅ 2017/11/27 ⋅ 0

Linux 增加交换分区

Linux下增加交互分区(swap)主要有两种方法:一种是swap分区;另一种是 swap文件。前者适合有空间的分区可以使用;后者适合没有空的磁盘分区,硬盘的空间已经分配完毕了。 最近安装CentOS ...

科技小能手 ⋅ 2017/11/12 ⋅ 0

linux-管理系统存储

、分区划分 1、设备名称的读取 /dev/xd* x=s /dev/sd* sata硬盘,或着iscsi网络存储 x=v /dev/vd* 虚拟硬盘,一般出现在虚拟机里 x=h /dev/hd* ide硬盘,一般出现在老式电脑中 /dev/sda1 系统...

科技小能手 ⋅ 2017/11/12 ⋅ 0

Day15 磁盘格式化、磁盘挂载和增加swap空间

磁盘格式化 blkid 命令 描述:查看一个还没挂载的分区 示例: mke2fs 命令 描述:格式化磁盘 选项: -b :指定块大小 -t :指定文件系统的类型 。 不支持xfs 类型, 可用mkfs命令达成 -m :指...

杉下 ⋅ 06/16 ⋅ 0

linux磁盘分区格式化、挂载及增加swap空间

一、格式化 查看当前磁盘支持的文件系统 查看分区文件系统:lsblk -f 可以看到sdb还没有格式化 mke2fs格式化分区(但不支持xfs) -t:指定文件系统(如果不指定默认是ext2) -b:指定块大小 ...

技术小阿哥 ⋅ 2017/11/27 ⋅ 0

Linux与VMware安装注意事项

Linux与VMware安装注意事项 一、Linux与Windows的不同 Linux严格区分大小写 Linux中所有内容都以文件形式保存,包括硬件 Linux不靠扩展名区分文件类型 Windows下的程序不能直接在Linux中安装...

JS_HCX ⋅ 06/13 ⋅ 0

Arch Linux 安装指南

1. 前提 为什么推荐Arch Linux?因为它好用呗! 如果想要学习Linux,Arch Linux是个很好的选择。Arch Linux提供了非常详细并且更新及时的Wiki(帮助文档),使用系统的过程中遇到的问题基本上...

清无色 ⋅ 05/14 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 10分钟前 ⋅ 0

CentOS开机启动subversion

建立自启动脚本: vim /etc/init.d/subversion 输入如下内容: #!/bin/bash## subversion startup script for the server## chkconfig: 2345 90 10# description: start the subve......

随风而飘 ⋅ 14分钟前 ⋅ 0

Nginx + uwsgi @ubuntu

uwsgi 安装 sudo apt-get install python3-pip # 注意 ubuntu python3默认没有安装pippython3 -m pip install uwsgi 代码(test.py) def application(env, start_response): start_res......

袁祾 ⋅ 15分钟前 ⋅ 0

版本控制工具

CSV , SVN , GIT ,VSS

颖伙虫 ⋅ 17分钟前 ⋅ 0

【2018.06.19学习笔记】【linux高级知识 13.1-13.3】

13.1 设置更改root密码 13.2 连接mysql 13.3 mysql常用命令

lgsxp ⋅ 25分钟前 ⋅ 0

LVM

LVM: 硬盘划分分区成物理卷->物理卷组成卷组->卷组划分逻辑分区。 1.磁盘分区: fdisk /dev/sdb 划分几个主分区 输入t更改每个分区类型为8e(LVM) 使用partprobe生成分区的文件:如/dev/sd...

ZHENG-JY ⋅ 53分钟前 ⋅ 0

彻底删除Microsoft Office的方法

参照此链接彻底删除Office https://support.office.com/zh-cn/article/%e4%bb%8e-pc-%e5%8d%b8%e8%bd%bd-office-9dd49b83-264a-477a-8fcc-2fdf5dbf61d8?ui=zh-CN&rs=zh-CN&ad=CN......

Kampfer ⋅ 今天 ⋅ 0

大盘与个股之间关系

大盘走多:积极出手 顺势加码 大盘走空: 少量出手 退场观望 大盘做头:逆势减码 少量操作 大盘做底 : 小量建仓 小量试单

guozenhua ⋅ 今天 ⋅ 0

Day16 LVM(逻辑卷管理)与磁盘故障小案例

lvm详解 简述 LVM的产生是因为传统的分区一旦分区好后就无法在线扩充空间,也存在一些工具能实现在线扩充空间但是还是会面临数据损坏的风险;传统的分区当分区空间不足时,一般的解决办法是再...

杉下 ⋅ 今天 ⋅ 0

rsync实现多台linux服务器的文件同步

一、首先安装rsync,怎样安装都行,rpm,yum,还是你用源码安装都可以。因为我用的是阿里云的ESC,yum install rsync就ok了。 二、配置rsync服务 1.先建立个同步数据的帐号 123 groupadd r...

在下头真的很硬 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部