Linux 磁盘分区详解

Linux 磁盘分区详解,第1张

Linux 系统中所有的硬件设备都是用文件的形式来表示和使用的,也就是说,如果你想使用某个硬件设备首先你就需要将其挂载到某个目录下面,通过对这个目录的 *** 作来 *** 作设备;如果不挂载,通过Linux系统中的图形界面系统可以查看找到硬件设备,但命令行方式无法找到。

并不是根目录下任何一个目录都可以作为挂载点,由于挂载 *** 作会使得原有目录中文件被隐藏,因此根目录以及系统原有目录都不要作为挂载点,会造成系统异常甚至崩溃,挂载点最好是新建的空目录

磁盘也是一样的,磁盘的文件是存放在 /dev 目录下,磁盘设备文件的命名规则为:

常见的主设备号有:sd,hd;它们是代表的不同的磁盘类型: sd 代表的 IDE 硬盘, hd 代表的是 SCSI 硬盘

次设备号就是同一类型设备的次序,用 [a-z] 来表示, /dev/sda 表示第一块 IDE 类型的磁盘, /dev/sdb 表示第二块 IDE 类型的磁盘

磁盘分区编号,每一块磁盘都会被划分为多个磁盘分区(这个下面会介绍),每一个分区都会有一个编号,比如: /dev/sda1 表示这是该磁盘的第一个分区,以此类推

在 Linux 中,每一个硬盘设备都只能划分四个主分区;若是划分了一个扩展分区那最多可以划分三个主分区;可以表示为:

主分区加扩展分区最多只有四个;可以全部划分为主分区,也可以之划分一个主分区;但是扩展分区最多只有一个;扩展分区是不能直接使用的,还有进一步划分为逻辑分区才能使用;一个扩展分区可以划分为多个逻辑分区;

主分区的分区编号是:1,2,3,4;从扩展分区划分出来的逻辑分区的编号是从 5 开始,以次累加

这跟系统启动有关系;当你启动电脑时,首先就会加载 BIOS 信息,这里面包含了 Cpu 和其他硬件设备的信息;找到它计算机就知道怎么启动了

接下来,它会去找 MBR(Master Boot Record) ,也就是主引导记录;为了方便 BIOS 的查找,所以就会把它放在磁盘上第0磁道上的第一个扇区中,磁盘中每个扇区有 512 字节;虽然只有这么大一点,但是要存三部分信息:

磁盘分区表总共只有 64 字节,而每个分区信息占 16 个字节,所以就只能有四个主分区了

这应该是历史遗留的问题了,一开始只有四个分区,后来发现四个分区不够用,就引入了扩展分区,而扩展分区是不能直接使用的,它必须再划分为逻辑分区,逻辑分区的数量可以是任意多个。

对用户而言,主分区和逻辑分区使用起来没有任何的区别,同时还能够达到无限分区的目的

我想很多人都思考过这个问题,我再了解了之后才发现磁盘分区还是有很多的好处的。具体例子:

现在给你一个仓库,你打算存放快递,一开始你一股脑的把所有的快递直接放进去,等到别人来取快递的时候你就发愁了,几十甚至上百个快递得找到啥时候啊

所以你打算开始分区管理,因为你代理了中通,圆通,百世等好几个快递,所以你打算按照不同的快递分为三个货架;

过一段时间发现同一种快递如果量大的时候还是会混乱;因此你又想了个办法就是按照日期给快递编号,然后按照不同的日期将货架分为多层,每一层存放某一天的快递,同时你又找了个表记录了每个分区快递存放的位置,这大大增加了存取的效率

磁盘分区的目的,

Linux 常见目录:

一般要是新手,可以只建立两个分区:

这种分区方式比较简单,如果只是测试可以用这种;要是想当成一个常用的系统,就需要更细一点划分了,常用的分区方案如下(假如有磁盘有100G):

注意:

如果你是IDE 接 口 硬 盘 :/dev/dh[a-z],这里的硬盘名字应该是dh[a-z]开头

如果你是SCSI 接 口 硬 盘 : / dev/[ a -z ],这里的硬盘名字应该是sd[a-z]开头,我们的新硬盘为sdb

可以看到sdb大小为10G,只是一块磁盘(disk)并没有分区

fdisk /dev/sdb

经过以上步骤后分区的建立已经完成,但是此时系统还无法识别分区表

sudo mkdir /data1

sudo mount /dev/sdb1 /data1

硬盘路径 文件路径(挂载点)文件系统类型设备的自定义选项是否转存fsck的顺序

/dev/mapper/[CentOS](https://www.linuxidc.com/topicnews.aspx?tid=14)-root / xfs  defaults 0  0

我们要在最后一行写入自己的分区与文件路径,可以仿照上面的写

/dev/sdb1  /data1 ext4  defaults 0  0

转存:0 不转存,不备份 1转存,备份

fsck:开机检查磁盘的顺序0表示不检查1234....为检查顺序

这里第一列也可以写入UUID (使用 blkid 查询UUID(blkid找不到需要的uuid,需要格式化后才有))

这里我们直接使用 lsblk -o name,mountpoint,size,uuid 查询磁盘的uuid

Linux系统有一个理念:“一切皆文件”,所以计算机的硬件在linux中也是以“文件”的形式存在于/dev目录中。

比如,光驱对应的文件是/dev/cdrom,CPU对应的文件是/dev/cpu。而硬盘对应的是/dev/sd*。第一块硬盘是/dev/sda,第二块磁盘是/dev/sdb。

IDE磁盘的设备文件采用/dev/hdx 来命名,分区则采用/dev/hdxy来命名,其中想表示磁盘(a是第一块磁盘,b是第二块磁盘,以此类推),与代表分区的号码(由1开始,1,2,3,以此类推)

SCSI设备和分区采用/dev/sdx和/dev/sdxy来命名(x和y的命名规则与IED磁盘命名规则一样)。

A、对IED接口

第一主盘:hda第一从盘:hdb 第一从盘第一分区:hdb1

B、对SCSI接口

第一主盘:sda 第一从盘:sdb 第一从盘第一分区:sdb1

但是一个磁盘通常又被分成多个分区,所以在磁盘文件的后面加上分区的序号来对应这个分区。参考下面的表格中的例子。

Linux磁盘分区与文件系统类常用命令

介绍2种分区表:

所支持的最大卷:2T (Tterabytes,1TB=1024GB)

对分区的设限:最多4个主分区或3个主分区加一个扩展分区。

MBR分区的原理:

MBR:主引导扇区

主分区表:64bytes,最多只能分四个主分区,每个主分区的记录(相关信息,比如分区大小,位置)在主分区表里占14bytes。

如 果要建多于四个的分区,就要拿出一个主分区做为扩展分区,再在扩展分区里面进行其它的分区 *** 作。在 建扩展分区的时候会建立一张对应的扩展分区表,它记录了在这个扩展分区里的分区的相关信息;理论上它没有分区数量的限制,在扩展分区内部的分区叫做逻辑分 区,如上图中的 /dev/hda5,/dev/hda6/,/dev/hda7

格式化原理:

在 分好区后,分区里面是空的,没有任何东西。为了能让OS识别,就必须要向分区里写入相应格式的数据。

比如windows的 FAT32,NTFS,Linux的ext2,ext3,ext4

Windows/dos常用的分区工具:fdisk/partition magic/diskpart

Linux下常用的分区工具:

fdisk/sfdisk:命令行工具,各种版本和环境都能使用,包含在软件包util-linux中

diskdruid:图形化分区工具,只能在安装REDHAT系统时使用。

支持最大卷:18EB,(E:exabytes,1EB=1024TB)

每个磁盘最多支持128个分区

所以如果要大于2TB的卷或分区就必须得用GPT分区表。

Linux下fdisk工具不支持GPT,得使用另一个GNU发布的强大分区工具parted。

fdisk工具用的话,会有下面的警告信息:

下面是用parted工具对/dev/sda做GPT分区的过程:

如果我们的磁盘是2T以下的,但是分区表示GPT格式,我们也可以使用parted 命令将该分区表删除, mklabel msdos 这条命令就是用来删除 part分区 ,将GPT分区表删除后,再来使用 fdisk 建立MBR分区表,可以参考 https://www.xiaohuai.com/4870

mkfs - 支持ext2、ext3(日志)、ext4、vfat、msdos、jfs、reiserfs等

用法1:mkfs -t <fstype><partition>

用法2:mkfs.<fstype><partition>

ps:格式化分区之后,可以使用e2label命令给分区添加卷标

e2label 分区路径 卷标名

查看已经挂载的分区

或者

使用 mount 命令挂载

使用umount卸载分区时,可以指定挂载点,也可以指定挂载的路径, 卸载分区umount命令格式:

umount [option] special | node

或者

PS: 处理umount的时候显示 device busy?

这是因为有程序正在访问这个设备,最简单的办法就是让访问该设备的程序退出以后再umount。可能有时候用户搞不清除究竟是什么程序在访问设备,如果用户不急着umount,则可以用:

CODE:

选项 –l 并不是马上umount,而是在该目录空闲后再umount。还可以先用命令ps aux 来查看占用设备的程序PID,然后用命令kill来杀死占用设备的进程,这样就umount的非常放心了。

linux系统在启动时,会从/etc/fstab文件自动挂载分区。

如下是一个fstab文件的示例。

fstab中,每条配置信息都分为固定的6个部分

[1]: 分区路径,或者UUID

[2]: fs_file - 该字段描述希望的文件系统加载的目录点,对于swap设备,该字段为none;对于加载目录名包含空格的情况,用40来表示空格。

[3]: fs_type - 定义了该设备上的文件系统,一般常见的文件类型为ext4 (Linux设备的常用文件类型)、vfat(Windows系统的fat32格式)、NTFS、isoArray600等。在不确定的情况下可以使用auto。

[4]: fs_options - 指定加载该设备的文件系统是需要使用的特定参数选项,多个参数是由逗号分隔开来。

对于大多数系统使用"defaults"就可以满足需要。不多说。

[5]: fs_dump - 该选项被"dump"命令使用来检查一个文件系统应该以多快频率进行转储,若不需要转储就设

置该字段为0

[6]: fs_pass - 该字段被fsck命令用来决定在启动时需要被扫描的文件系统的顺序,根文件系统"/"对应该字

段的值应该为1,其他文件系统应该为2。若该文件系统无需在启动时扫描则设置该字段为0

参考


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8534975.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-17
下一篇2023-04-17

发表评论

登录后才能评论

评论列表(0条)

    保存