Linux 磁盘分区(MBR和GPT,loop详细分区方法介绍)

   日期:2024-12-26    作者:sftpu 移动:http://mip.riyuangf.com/mobile/quote/44352.html

磁盘分区和格式化操作是比较接近硬件底层的操作,这两个操作也是至关重要的,决定了磁盘的使用效率和磁盘的数据安全。(相信现在应该没有什么特别的需要,一般都已经抛弃了ext2,ext4文件格式了吧~~~~,ext2,ext3,ext4,xfs ,等等文件系统格式的优缺点不在本文讨论范围,有想了解的百度即可啦

Linux 磁盘分区(MBR和GPT,loop详细分区方法介绍)

本文也不讨论Windows的文件系统格式,比如什么DOS,fat16,fat32,ntfs这些啦,主要的是想说一下Linux下的分区表格式,那就是MBR和GPT和loop。

有些同学会奇怪,怎么还有一个loop,这里需要申明,loop是表示整盘分区的,意思就是整个硬盘作为一个独立的分区,比如,一个新的硬盘插到主板上后,Linux系统开机后,如果不出意外,将会lsblk命令可以看到,此时,不使用fdisk或者parted,gparted等分区格式化工具,直接 格式化整个硬盘,格式化完成后,此时的硬盘分区就是loop了。

假设我有一块新的硬盘被Linux系统识别为了sde, 那么,我只执行 mkfs.xfs /dev/sde 这个格式化命令,此时,这个硬盘就是loop分区格式啦!~~~~~

下面将仔细讲解。




分区所使用的命令主要为fdisk和parted,查看磁盘的详细情况的命令主要为lsblk,blkid,df   这三个命令。

  1. lsblk

盲猜这个命令是 list status block的缩写,当然, 这么理解也是会更记忆深刻:列出所有块设备的状态。用于列出所有可用块设备的信息,而且还能显示他们之间的依赖关系,但是它不会列出RAM盘的信息。块设备有硬盘,闪存盘,cd-ROM等等。lsblk命令包含在util-linux-ng包中,现在该包改名为util-linux。这个包带了几个其它工具,如dmesg。要安装lsblk,请在此处下载util-linux包。如果没有此命令,来安装该包即可。比如,我的虚拟机的所有磁盘信息是这样的

 

这里,表示有三个硬盘,sda,sdb,sdc,容量分别为100G,22G,3.7T,sda这个硬盘划分了两个分区,分别为sda1和sda2,sda2又是使用的lvm格式,并且每个分区的挂载点也列出来了,sda3和sda4容量基本可以忽略,并且没有进行挂载。sr0表示光驱,也没有挂载。

    2. blkid

该命令显示所有已经格式化的分区详细信息,其中有UUID,该ID为系统随机分配的固定的唯一标识,因此,我们挂载的时候应该使用UUID写入/etc/fstab ,即使硬盘挂载顺序有变,依然保证挂载的有效(比如,我有很多硬盘,然后我把一个新的硬盘插到了某个旧的原有的硬盘位,而旧有的硬盘换位置啦,这个时候,可能sdb 就会变成sdd或者别的名字了,如果/etc/fstab 里写的是 诸如 /dev/sdb 这么固定的,那么,挂载必定会出错啦~~!~~~~!~~~~

 

以上显示我所有的格式化过的分区,每个分区的文件系统类型也标识了出来,比如,/dev/sdb: UUID="0fe31ddd-9388-4b5f-ab21-28d6190eed94" TYPE="ext4" 表示 sdb这个硬盘格式化成了ext4文件系统这个命令的用处就是查看并校验我们是否格式化成功的命令

    3. df

df 是一个古老的命令,该命令会显示所有已挂载到系统内的分区的使用情况

 

这里比较特殊的是cgroup文件系统,它的定义大概是这样的(docker和cgroup是深度绑定的,因此,在这里稍微提一下。)

Linux CGroup全称Linux Control Group, 是Linux内核的一个功能,用来限制,控制与分离一个进程组群的资源(如CPU、内存、磁盘输入输出等)。这个项目最早是由Google的工程师在2006年发起(主要是Paul Menage和Rohit Seth,最早的名称为进程容器(process containers)。在2007年时,因为在Linux内核中,容器(container)这个名词太过广泛,为避免混乱,被重命名为cgroup,并且被合并到2.6.24版的内核中去。然后,其它开始了他的发展。 

   Linux CGroupCgroup 可​​​让​​​您​​​为​​​系​​​统​​​中​​​所​​​运​​​行​​​任​​​务​​​(进​​​程​​​)的​​​用​​​户​​​定​​​义​​​组​​​群​​​分​​​配​​​资​​​源​​​ — 比​​​如​​​ CPU 时​​​间​​​、​​​系​​​统​​​内​​​存​​​、​​​网​​​络​​​带​​​宽​​​或​​​者​​​这​​​些​​​资​​​源​​​的​​​组​​​合​​​。​​​您​​​可​​​以​​​监​​​控​​​您​​​配​​​置​​​的​​​ cgroup,拒​​​绝​​​ cgroup 访​​​问​​​某​​​些​​​资​​​源​​​,甚​​​至​​​在​​​运​​​行​​​的​​​系​​​统​​​中​​​动​​​态​​​配​​​置​​​您​​​的​​​ cgroup。

这里这个示例我是使用的vm虚拟机,操作系统是centos7.4,总共挂载了三块硬盘,硬盘的情况如下

 

这里提前说一下,我这个操作系统内有三种,sda是MBR分区表形式,sdb和c是loop分区表形式(也就是整盘挂载,GPT分区表后面在实现。

先容我卖一个关子,讲讲怎么看 MBR,GPT和loop的分区表信息吧~~~~~~~




A:查看MBR分区表信息

 

 前面已经说了sda是MBR分区表,以上命令是复制备份分区表信息,将信息存放到名为mbr.hex这个文件内的,查看该文件的内容是如下命令

 

文件内容如下

 

 在末尾,可以看到mbr的标志:55aa,也就是说只要看到55aa,我们就应该可以确定,这个硬盘是MBR分区表形式啦。55aa是硬盘有效标志,若被篡改则系统认为硬盘损坏.早期一些dos下的病毒喜欢篡改这个标志,造成硬盘损坏,但是分区还在。比较出名的此类病毒比如熊猫烧香就是更改55aa标志啦。

B

GPT分区表的查看

 

gpt标准的结构是32个扇区,所以这里要操作32次,即依次读取第一块硬盘的0~31扇区。

读取二进制文件的内容命令为

 

GPT暂时没有,后面补充该文件的内容

首先开头的是一个保护性的MBR,为的是兼容,和早期的MBR类似,以55AA作为结束。

接下来是GPT头,以UEFI PART作为头标识字符。

C

loop分区表的查看

 

文件内容如下: 

 

在查看sdc的分区表,发现内容和sdb是一样的

 

 有一个有意思的事情,我们如果查看光驱,也就是sr0的分区表 ,将会看到MBR分区表的标识,但是,你可以发现,后面的几行全是0

 



上面我们是通过复制备份硬盘的分区表,根据它自己的特点,可以看出是哪一类的分区,那有没有更快速有效的方法呢?当然有了,这时候就需要 fdisk和parted命令啦

,fdisk

古老的硬盘分区程序,Linux自带的,只是这个程序只支持MBR分区并且该命令是修改内存的,也就是说不按w键,将不会对任何改动生效

例如,我将sdc这个硬盘转换成GPT后,使用命令 fdisk /dev/sdc  将会出现如下输出

 

 如果是MBR,fdisk将不会提示

 

,parted命令 

这个命令相比fdisk更新,因此,该程序向下兼容fdisk,也就是说可以分区MBR,也可以分区GPT此命令是即时生效,这里需要注意,不同于fdisk哦,因此,该命令需要谨慎使用。查看分区类型的命令是 :parted 磁盘名称 print,比如看sdb和sdc

 

sdb是整盘分区,loop,sdc就是GPT啦。

其中的Warning: Partition(s) on /dev/sdc are being used.说的是硬盘在使用,如果强行更改分区表,数据将会全部丢失,选择当然是忽略Ignore啦,第二个是问要不要继续,当然是Yes啦。更改完后parted提示你要修改挂载配置文件 /etc/fstab。
Ignore/Cancel? Ignore 
Warning: The existing disk label on /dev/sdc will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Yes                                                               
Information: You may need to update /etc/fstab

 

以上仅仅是将磁盘sdc的分区表改为了GPT,还需要继续分区,命令是: mkpart mydata xfs

 

通过命令parted mkpart mydata xfs  输入20000(单位是M,mydata是一个自定义的名称,可以随意,但最好有一定的意义,自己清楚比较好哦,我们分了一个20G的区,现在格式化后(命令为mkfs.xfs /dev/sdc1)可以通过命令 blkid看到我们新分出来的这个区啦

为什么是sdc1呢?因为,我们通过lsblk命令可以看到啦

 
 

,现在并不想只有一个分区怎么办呢?光一个sdc1太孤单啦,在分一个区吧! 命令是:parted /dev/sdc mkpart mydata2

 

好啦,现在我们在通过lsblk和blkid看看sdc这个硬盘什么样了吧

 

可以看到,又分了一个200G的名字叫mydata2的分区。以上分区操作,我们会发现使用M这个单位有点眼花啦,因为4t基本等于4000000M,光数0就很头疼啦,怎么办?可以指定单位是G啦,好了,现在就把所有分的区清理掉,命令是:parted /dev/sdc rm 1   parted   /dev/sdc   rm 2

 

如果你瞎写一个 不存在的分区序号,那么会简单报个错(比如,上面的分区已经删除完了,在执行一次 parted /dev/sdc rm 1

 

现在开始正式的分区啦,当然,首先我们要看看sdc到底是多大的硬盘,命令如下

 

可以看到,是4080G,第一个分区我们要分4t大小,那么,命令是这样的(非交互式的哦,效果是和上面的一样的

 

可以看到,非交互式可以直接格式化好分区,交互式并不会。因为4T大于4080G,因此,是全部分完的哦。

再次删除,重新划分分区,这次是3000G和1000G两个分区,那么,命令应该是这样的这里有技巧的,下一个分区的开始是上一个分区的结束,这里请仔细理解

 

这里需要注意,第二个分区因为分区的时候输入了Ignore,因此,指定的xfs并没有显示,我们需要专门对此分区格式化一下,也就是命令 

特别注意,这样指定的xfs其实并没有什么卵用,还是需要格式化一下的,因为,你如果不格式化,直接挂载是可以成功的,但df命令显示的容量是不对的。

 

mkfs.xfs /dev/sdc2   当然,也可以格式化成你想要的其它文件系统,比如ext4,这些都是没有什么问题的。

 

通过blkid我们查出sdc1的UUID,然后将这个UUID写入/etc/fstab 进行挂载就可以使用啦,当然,把这个写入/etc/fstab 文件内也是可以接受的---PARTUUID=4618b8db-269e-4255-ab88-e6c9e3c0ad9a

 

格式化后,挂载成功后,df命令将显示实际的准确的容量(文件系统毕竟也是要算容量的啊,当然会小很多啦。

 



整盘分区也就是loop模式就是直接执行硬盘格式化命令,系统会认为这个硬盘是loop分区表啦,例子如下


 

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号