linux磁盘分区fdisk命令操作(实践)

 写这篇的目的,还是要把整个过程完整的记录下来,特别是小细节的地方,通常很多情况是一知半解,平时不实践操作只凭看是没有用的,所以做这个行业就是要多动手,多学习,多思考慢慢你的思路也会打开。练就自己的学习能力和动手能力很重要。由于时间比较仓促,难免会有遗漏的点,我每一篇文章都可能会进行相关的纠正,包括格式和叙述方式等,还望见谅。这篇博文的标题也是一直在改。(这篇博文再多次修改之后,发现有点冗长,但是如果仔细去分析,会发现对于整体认识有好处,涉及很多的基础点)

复习和回顾一些小的知识点,对于理解这篇文章会很有好处:

1、机械硬盘接口类型主要分为以下几种

 1、IDE接口,IDE代表着硬盘的一种类型,IDE接口硬盘多用于家用产品中,也部分应用于服务器。人们也习惯用IDE来称呼最早出现IDE

类型硬盘ATA-1,这种类型的接口随着接口技术的发展已经被淘汰了,而其后发展分支出更多类型的硬盘接口,比如ATA、Ultra ATA、DMA、Ultra DMA等接口都属于IDE硬盘。
以上是传统的并行ATA传输方式,后来又出现了串行ATA(Serial ATA,简称SATA),其最大数据
传输率更进一步提高到了150MB/sec,将来还会提高到300MB/sec,而且其接口非常小巧,排线
也很细,有利于机箱内部空气流动从而加强散热效果,也使机箱内部显得不太凌乱。与并行ATA相比
,SATA还有一大优点就是支持热插拔
2、SATA接口,使用SATA接口的硬盘又叫串口硬盘,这是目前主流的接口类型,机械硬盘基本就是这个接口。固态硬盘也一样,采用2.5英寸设计,SATA是Serial Advanced Technology Attachment的缩写,SATA采用串行连接方式,串行ATA总线使用嵌入式时钟信号,具备了更强的纠错能力。
4、光纤通道接口,光线通过类型硬盘的英文名称为Fibre Channel,其最初设计也不是为了硬盘设计开发的接口,是专门为网络系统设计的,但随着存储系统对速度的需求,才逐渐应用到硬盘系统中。光纤通道是为向服务器这样的多硬盘系统环境而设计的,有热插拔性,高速带宽,远程连接,连接设备数量大等特点。
5、SCSI接口,SCSI是Small Computer System Interface的缩写,拥有传输速率高、读写性能好、可连接多个设备、可支持热插拔、价格比较贵的特点。SCSI接口硬盘主要应用于中、高端服务器和高档工作站中。
6、SAS接口,SAS串行连接SCSI,是新一代的SCSI技术,与SATA硬盘相同,都是采用串行技术以获得更高的传输速度.SAS的接口技术可以向下兼容SATA,但反过来SATA系统并不兼容SAS。
7、ATA-1(IDE):ATA是最早的IDE标准的正式名称,IDE实际上是指连在硬盘接口的硬盘本身。ATA在主板上有一个插口,支持一个主设备和一个从设备,每个设备的最大容量为504MB,ATA最早支持的PIO-0模式(Programmed I/O-0)只有3.3MB/s,而ATA-1一共规定了3种PIO模式和4种DMA模式(没有得到实际应用),要升级为ATA-2,需要安装一个EIDE适配卡
8、ATA-2 (EIDE Enhanced IDE/Fast ATA):这是对ATA-1的扩展,它增加了2种PIO和2种DMA模式,把最高传输率提高到了16.7MB/s,同时引进了LBA地址转换方式,突破了老BIOS固有504MB的限制,支持最高可达8.1GB的硬盘。如你的电脑支持ATA-2,则可以在CMOS设置中找到(LBA,LogicalBlock Address)或(CHS,Cylinder,Head,Sector)的设置。其两个插口分别可以连接一个主设备和一个从设置,从而可以支持四个设备,两个插口也分为主插口和从插口。通常可将最快的硬盘和CD-ROM放置在主插口上,而将次要一些的设备放在从插口上,这种放置方式对于486及早期的Pentium电脑是必要的,这样可以使主插口连在快速的PCI总线上,而从插口连在较慢的ISA总线上。
9、ESDI接口:即(Enhanced Small Drive Interface)接口,它是迈拓公司于1983年开发的。其特点是将编解码器放在硬盘本身之中,而不是在控制卡上,理论传输速度是前面所述的ST-506的2…4倍,一般可达到10Mbps。但其成本较高,与后来产生的IDE接口相比无优势可言,因此在九十年代后就被淘汰了

2、硬盘种类主要是机械硬盘和固态硬盘

 硬盘是计算机的主要外部存储设备。计算机中的存储设备种类非常多,常见的主要有光盘、硬盘、U 盘等,甚至还有网络存储设备 SAN、NAS 等,不过使用最多的还是硬盘。如果从存储数据的介质上来区分,硬盘可分为机械硬盘(HDD)和固态硬盘(SSD),机械硬盘采用磁性碟片来存储数据,而固态硬盘通过闪存颗粒来存储数据。

3、关于设备种类

  Linux 中一切都是文件,包括硬盘、鼠标、打印机等硬件设备也通常被表示映射为文件即块设备,用来表示这些硬件设备的文件的名字即为“设备文件名”。一般设备文件名保存在 /dev/ 目录下,Linux 中常见的硬件设备(映射为块设备)的设备文件名如下:

 

  另外字符( char ) 设备是一种可以当作一个字节流来存取的设备( 如同一个文件 ); 字符驱动模块负责实现这种行为。
这样的驱动模块至少实现 open, close, read, 和 write 系统调用。文本控制台( /dev/console )和串口( /dev/ttyS0 及其他 )是字符设备的例子, 因为它们很好地展现了流的抽象。字符设备通过文件系统结点来存取, 例如 /dev/tty1 和 /dev/lp0。 
 还有一种就是网络设备。
   linux由于一切是文件必然要求你对相关的设备要做映射关系。 比如:硬盘就需要你挂载硬盘到服务器,大部分服务器安装的操作系统都能自动识别添加的硬件,这个时候还不能使用
   需要你对该硬盘进行分区、格式化、目录挂载等一系列操作之后才能使用。

四、驱动种类

Linux将驱动分为三大类:字符设备驱动、块设备驱动以及网络设备驱动。

1、字符设备驱动:顾名思义,应用程序与驱动程序之间的数据交互是以字符(字节)为单位的,字符设备通常没有中间缓存。常见的字符设备有:led、key、camera、显卡、串口等

2、块设备驱动:顾名思义,应用程序与驱动程序之间的数据交互是以块为单位的,主要针对的是存储设备,通常设有中间缓存,并且带有文件系统,可以任意位置访问。常见的块设备有:U盘、eMMC、SD卡等

3、网络设备驱动:网络设备面向数据包的发送而设计,它并不对应于文件系统的节点。即不对应 /dev 目录下的设备文件,应用程序最终通过套接字
socket 完成与网络设备的数据交互。常见的网络设备有网卡(无线网卡、有线网卡)。
   如果做过开发嵌入式开发,应该很好理解驱动程序概念,块设备的驱动例如硬盘,摄像头,一般都是硬件厂商会给驱动程序包,封装对硬件的操作,给上层提供接口,接口应用再去调用这些接口。windows下一般都dll。操作系统会有大量的一些驱动程序,屏蔽了对硬件的操作。上面只要关注程序开发即可。

     windows静态库文件就是.lib文件,动态库文件就是.dll文件
     unix系统的静态库文件和动态库文件后缀分别是.a和.so

 

五、linux文件种类

 包括普通文件、目录文件(目录也是文件)、链接文件(软链接和硬链接)、设备文件(块设备和字符设备)
 这里特别说下字符设备是一种按字节来访问的设备,字符驱动则负责驱动字符设备,
 这样的驱动通常实现open、close、read和write系统调用。例如:串口、Led、按键等


  

六、linux文件系统

 虚拟文件系统(VFS) 操作模型,通过mkfs.xxx等这种系列性的命令创建格式化很多不同的文件系统,
比如:mkfs.ext4 /dev/sda 、 mkfs.btrfs /dev/sdb等,但这些不同的文件系统都有各自的API接口,
而用户想要的是,不管你是什么API,他们只关心mount/umount,或open/close等操作,等于屏蔽了底层的文件系统类型,
运维层面只关心mount等操作即可。不同的文件系统类型有不同的特点,因而根据存储设备的硬件特性、系统需求等有不同的应用场合,什么意思呢,也就是说
假如你用了不同设备都是硬盘,那么建立这个硬盘可以用不同的文件系统来做映射,可能就会获得不同的性能提升。还是要看
相关的设备种类和厂商设计的目的。

 

 

vfs模型关系是:

  物理磁盘---》
  设备驱动 ----》
       io操作接口抽象----》
                      ex2/ext3/xfs----》
        vfs(对不同的文件系统的抽象处理为上层提供api接口)---》
              系统调用命令

文件系统描 述
Ext Linux 中最早的文件系统,由于在性能和兼容性上具有很多缺陷,现在已经很少使用,是为 Linux 核心所做的第一个文件系统,最大可支持 2GB 的文件系统。
Ext2 是 Ext 文件系统的升级版本,Red Hat Linux 7.2 版本以前的系统默认都是 Ext2 文件系统。于 1993 年发布,支持最大 16TB 的分区和最大 2TB 的文件(1TB=1024GB=1024x1024KB)

Linux正统的文件系统(如ext2、ext3)一个文件由目录项、inode和数据块组成。
目录项:包括文件名和inode节点号。
Inode:又称文件索引节点,是文件基本信息的存放地和数据块指针存放地。
数据块:文件的具体内容存放地。
将硬盘分区时会划分出目录块、inode Table区块和data block数据区域。一个文件由一个目录项、inode和数据区域块组成。
Inode包含文件的属性(如读写属性、owner等,以及指向数据块的指针),数据区域块则是文件内容。
当查看某个文件时,会先从inode table中查出文件属性及数据存放点,再从数据块中读取数据

Ext3 是 Ext2 文件系统的升级版本,最大的区别就是带日志功能,以便在系统突然停止时提高文件系统的可靠性。支持最大 16TB 的分区和最大 2TB 的文件
Ext4 是 Ext3 文件系统的升级版。Ext4 在性能、伸缩性和可靠性方面进行了大量改进。Ext4 的变化可以说是翻天覆地的,比如向下兼容 Ext3、最大 1EB 文件系统和 16TB 文件、无限数量子目录、Extents 连续数据块 概念、多块分配、延迟分配、持久预分配、快速 FSCK、日志校验、无日志模式、在线碎片整理、inode 增强、默认启用 barrier 等。它是 CentOS 6.3 的默认文件系统
xfs 被业界称为最先进、最具有可升级性的文件系统技术,由 SGI 公司设计,目前最新的 CentOS 7 版本默认使用的就是此文件系统。
swap swap 是 Linux 中用于交换分区的文件系统(类似于 Windows 中的虚拟内存),当内存不够用时,使用交换分区暂时替代内存。一般大小为内存的 2 倍,但是不要超过 2GB。它是 Linux 的必需分区
NFS NFS 是网络文件系统(Network File System)的缩写,是用来实现不同主机之间文件共享的一种网络服务,本地主机可以通过挂载的方式使用远程共享的资源
iso9660 光盘的标准文件系统。Linux 要想使用光盘,必须支持 iso9660 文件系统
fat 就是 Windows 下的 fatl6 文件系统,在 Linux 中识别为 fat
vfat 就是 Windows 下的 fat32 文件系统,在 Linux 中识别为 vfat。支持最大 32GB 的分区和最大 4GB 的文件
NTFS 就是 Windows 下的 NTFS 文件系统,不过 Linux 默认是不能识别 NTFS 文件系统的,如果需要识别,则需要重新编译内核才能支持。它比 fat32 文件系统更加安全,速度更快,支持最大 2TB 的分区和最大 64GB 的文件
ufs Sun 公司的操作系统 Solaris 和 SunOS 所采用的文件系统
proc Linux 中基于内存的虚拟文件系统,用来管理内存存储目录 /proc
sysfs 和 proc —样,也是基于内存的虚拟文件系统,用来管理内存存储目录 /sysfs
tmpfs 也是一种基于内存的虚拟文件系统,不过也可以使用 swap 交换分区


一、 硬盘分区基础知识

磁盘分区类型:

硬盘分区最常见的类型为msdos和gpt,前者表示MBR分区,而后者表示GPT分区。
传统的BIOS只支持MBR分区硬盘启动,一个硬盘只能分成四个分区,并且单个分区最大不超过2TB。
GPT(即GUID分区表)是源自EFI标准的一种较新的磁盘分区表结构的标准,是未来磁盘分区的主要形式。
与MBR分区方式相比,突破MBR4个主分区限制,每个磁盘最多支持128个分区,持大于2T的分区,最大卷可达18EB。

1、MBR分区:
MBR的意思是“主引导记录”,它有自己的启动器,也就是启动代码,一旦启动代码被破坏,系统就没法启动,
只有通过修复才能启动系统。最大支持2TB容量(T; terabytes,1TB=1024GB),
对分区的设限:最多4个主分区或3个主分区加一个扩展分区。
创建工具典型有fdisk。
2、GPT分区:
GPT意为GUID分区表,这是一个正逐渐取代MBR的新标准,它由UEFI辅住而形成的,这样就有了UEFI用于取代老旧的BIOS,
而GPT则取代老旧的MBR。这个标准没有MBR的那些限制比如:容量2T限制、分区个数限制等。磁盘驱动器容量可以大得多,
大到操作系统和文件系统都没法支持。它同时还支持几乎无限个分区数量,限制只在于操作系统,Windows支持最多128个GPT分区。
GPT和MBR是不同的分区表类型。使用MBR分区表的硬盘最多只能划分4个主分区磁盘,并且MBR最大仅支持2TB的硬盘。
如果需要分区的硬盘容量超过2TB了,则需要使用GPT分区表类型,此分区表类型不受分区个数、硬盘大小的限制。
创建GPT分区典型工具有parted,gdisk,sgdisk等,fdisk不支持创建GPT分区。


我们管理的服务器可能会随着业务量的不断增长而造成磁盘数据空间不足的情况(不考虑inode),这个时候我们就可能需要增加磁盘或挂载一些其他的块设备,这里我主要介绍如何使用fdisk分区工具创建磁盘分区和挂载分区。最重要的三步就是:
1、创建主分区。(主分区创建之后可以马上被使用但不能再分区)
2、创建扩展分区 (扩展分区必须再进行二次分区后才能被使用)
3、在扩展分区上创建逻辑分区(扩充分区再分下去的是什么呢?它就是逻辑分区(Logical Partion))

Linux下单个磁盘最多可以有15个分区。3个主分区 + 1个扩展分区 + 11个逻辑分区。
建议的分区方法是:先分3个主分区,第四个分区为扩展分区,然后在扩展分区中再分成11个逻辑分区。

在unix/linux系统中,一切都是文件。所有硬盘、软盘、键盘等设备都用文件来代表,对应 着/dev下面的文件。对于应用程序来说,可以像对待普通文件一样打开,关闭、读写这些设备文件。但是这种文件名,比如/dev/sda、/dev /raw/raw1都是用户空间名称,OS Kernel根本不知道这个名称指的是什么。在内核空间是通过major、minor device number 来区分设备的

块设备也是通过/dev目录下的文件系统节点来访问。块设备上能够容纳文件系统。
常见的块设备如磁盘、emmc flash、nand flash、 SD卡等。
在linux系统中/dev目录下使用ls -l命令查看详细信息,第一个字母“b”为块设备文件的标识。
/dev下每个块设备文件对应一个磁盘的分区。

注:实际在面试中发现很多运维人员连基础的硬盘操作都有有限,也是不理解的事情,在公司就是个混,一个5~6年出来的运维工程师连基础操作都不具备,出去找工作也是被人诟病。
如果是几台服务器,公司业务也没有起色也罢,也谈不上什么运维规划,但是职业技能总该提高吧,网上资源还是很丰富的,但是说实在的很多写的不是很细致,所以我这段写的先铺面,后进行整理
力求做到不误导别人。

首先我处的环境,机器众多,磁盘规划不是很合理,有的只是加了硬盘,但是没有做任何处理,浪费也比较严重,所以运维也可以说公司的重中之重。作为一个管理者来说,对于运维部分的掌握很重要,否则你会发现这里浪费现象很严重。

二、创建分区

虽然支持mbr的硬盘(容量小于等于2T)分区表中最多能存储四个分区,但我们实际使用时一般只分为两个分区,
一个是主分区(Primary Partion)一个是扩展分区(extended partition)两种,主分区可以马上被使用但不能再分区,扩展分区必须再进行分区后才能使用,也就是说它必须还要进行二次分区。那么由扩充分区再分下去的是什么呢?它就是逻辑分区(Logical Partion)。 对习惯于使用Dos或Windows的朋友来说,有几个分区就有几个驱动器,并且每个分区都会获得一个字母标识符,然后就可以选用这个字母来指定在这个分区上的文件和目录,它们的文件结构都是独立的,非常好理解。 
因为对Linux用户来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构。
 Linux中每个分区都是用来组成整个文件系统的一部分,因为它采用了一种叫“挂载点”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。

 

查看下操作系统情况(本实例在测试过程中,fp-web-126主机出现问题,所以fp-web-130主机都执行了相同的操作,所以不影响,包括环境都相同)

[root@fp-web-130 ~]# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core)

[root@fp-web-130 ~]# uname -r
3.10.0-327.el7.x86_64


1、 fdisk -l 查看块设备情况(块设备包括硬盘,U盘,SD卡) 


lsblk命令可以列出所有可用块设备的信息,比如我们说的逻辑磁盘,默认情况下将以树状列出所有块设备。
注意: 回环设备也是属于块设备(即虚拟块设备, 回环设备是将普通磁盘文件模拟成块设备来使用的驱动,可以把光盘、磁盘中的数据以普通文件的形式存在并被模拟成光盘或者磁盘来使用,回环设备最好要理解,应该docker架构阐述中应用的比较多

 

从下面图可以清晰的看到sdb是一个没有挂载和分区的磁盘(等待我们去做分区,格式化,挂载等操作)

 

 获取SCSI设备的列表,你只能使用-S选项

 

 lsblk命令输出结果解释:

 NAME :    该项这是块设备名。
 MAJ:MIN : 该项显示主设备号和次设备号,次设备号是内核来去用的。
 //关于主设备和次设备号,请看 https://www.cnblogs.com/aozhejin/p/15874504.html
 RM :      该项显示设备是否可移动设备。注意,在本例中设备sdb和sr0的RM值等于1,这说明他们是可移动设备。
 SIZE :    该项列出设备的容量大小信息。例如298.1G表明该设备大小为298.1GB,而1K表明该设备大小为1KB。
 RO :      该项表明设备是否为只读。在本案例中,所有设备的RO值为0,表明他们不是只读的。
 TYPE :    该项显示块设备是否是磁盘或磁盘上的一个分区。在本例中,sda和sdb是磁盘,而sr0是只读存储(rom)。
 MOUNTPOINT : 该项指出设备挂载的挂载点。

ls -l /dev 查看设备,当然字符设备对应的文件也都在/dev目录下,每一个文件对应一个硬件。在linux系统中/dev目录下使用ls -l命令查看详细信息,
第一个字母“c”为字符设备文件的标识,块设备文件,对应是b开头(磁盘就是块设备)

2.分区规划
    查看完,我们做一个规划,整个硬盘sdb大小是200G, 要对磁盘sdb分1个主分区(我用了1/6设置为sdb1),1个扩展分区,在扩展分区里面建1个逻辑分区
   下面的操作都是实际linux 根据命令执行的情况,复制的显示内容。尽量让人一看就明白,但是确实需要自己动手去做,这样体会更深。
    不同系统或者版本可能差异是有的.

3、 下面对/dev/sdb 进行分区:

[root@localhost Desktop]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x1949791c.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): m   //输入m查看帮助文档
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition              //添加一个新的分区
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)
Command (m for help): n  //输入n,回车新建分区

  Partition type:
       p primary (0 primary, 0 extended, 4 free)
       e extended
Select (default p): p
Partition number (1-4, default 1):1  #分区号为1,分区号是1到4

      注意: 首先是输入n ,询问我们是要创建主分区还是扩展分区,主分区最多只能创建4个,如果创建了扩展分区那么扩展分区需要占用一个主分区。

3、先建一个主分区
    有扩展分区和主分区,逻辑分区在扩展分区中建立。注意到括号中的1-4,最多只能建四个主分区(包括扩展分区)。

  #重复上面的,具体来看看建一个主分区如何操作

Command (m for help):n //输入n回车
Partition type:
       p primary (0 primary, 0 extended, 4 free)
       e extended Select (default p): p #输入p表示创建主分区,回车 Partition number (1-4): 1 #分区号为1,分区号是1到4,我们这里输入1,回车 First sector (2048-419430399, default 2048): #直接回车默认从第一个柱面开始划分,默认分区起始位置是从2048开始

  Using default value 2048
 

First sector (2048-419430399, default 2048): 2048
Last sector, +sectors or +size{K,M,G} (2048-419430399, default 419430399): 69905066 //这里直接默认回车将全部都分配给当前创建的主分区,这里肯定不想,所以需要这里设置一个值,我用计算器419430399/6=69905066 

 

  Partition 1 of type Linux and of size 33GiB is set  

  Command (m for help): p    //这时再次出现提示: 这里输入p,查看创建情况

  Disk /dev/sdb: 214.7 GB, 214748364800 bytes, 419430400 sectors //硬盘整个的信息
  Units = sectors of 1 * 512 = 512 bytes
  Sector size (logical/physical): 512 bytes / 512 bytes
  I/O size (minimum/optimal): 512 bytes / 512 bytes
  Disk label type: dos
  Disk identifier: 0xbd1a05e2

  Device    Boot Start   End      Blocks      Id  System
  /dev/sdb1       2048   69905066 34951509+   83   Linux

注: 每次操作完毕,就会回到 Command (m for help):  提示让你继续操作。

4、建立扩展分区

  我们继续创建扩展分区

Command (m for help):n

  Partition type:
       p primary (1 primary, 0 extended, 3 free)
       e extended
  Select (default p):e     //输入e,表示要创建扩展分区 
  Partition number (2-4, default 2):
2 //输入2回车,开始创建继续扩展分区

First sector (69905067-419430399, default 69906432): //这里我直接回车
Using default value 69906432:  Last sector, +sectors or +size{K,M,G} (69906432-419430399, default 419430399): //这里也直接回车,表示把剩下的部分都划给扩展分区

  Using default value 419430399
  Partition 2 of type Extended and of size 166.7 GiB is set(这里翻译为分区2为扩展分区,大小为166.7G被设置)

  Command (m for help): p   //出现提示,输入p查看当前创建情况

  Disk /dev/sdb: 214.7 GB, 214748364800 bytes, 419430400 sectors
  Units = sectors of 1 * 512 = 512 bytes
  Sector size (logical/physical): 512 bytes / 512 bytes
  I/O size (minimum/optimal): 512 bytes / 512 bytes 
  Disk label type: dos
  Disk identifier: 0xbd1a05e2

  Device    Boot Start    End       Blocks     Id System
  /dev/sdb1      2048     69905066  34951509+  83 Linux
  /dev/sdb2      69906432 419430399 174761984  5  Extended

5、建立逻辑分区(扩展分区建好后,提示输入n会很智能的显示是创建逻辑分区,还是主分区)

 

  这里我截个图吧
 

 Command (m for help): n

  Partition type:
      p primary (1 primary, 1 extended, 2 free)
      l logical (numbered from 5)
 Select (default p): l

Adding logical partition 5
First sector (69908480-419430399, default 69908480): 209715199
Last sector, +sectors or +size{K,M,G} (209715199-419430399, default 419430399): 419430399
Partition 5 of type Linux and of size 100 GiB is set

Command (m for help): p

Disk /dev/sdb: 214.7 GB, 214748364800 bytes, 419430400 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xbd1a05e2

Device    Boot Start    End      Blocks    Id  System
/dev/sdb1      2048     69905066   34951509+  83  Linux  //主分区
/dev/sdb2     69906432  419430399  174761984  5   Extended  //扩展分区
/dev/sdb5     209715199 419430399 104857600+  83  Linux     //sd2的逻辑分区,从一半位置向后设置到末尾

 注意:我们从end结束位置可以看出是否是逻辑分区,而sd2和sd5是sd2包含sd5位置。
上面显示已经建好一个主分区,一个逻辑分区。

6、这些现在还没有生效,需要保存退出。(只要系统都比较正常,保存退出之后,立即生效的)

  Command (m for help): w #保存退出,即生效,

  The partition table has been altered!

  Calling ioctl() to re-read partition table.
  Syncing disks.

  截图如下

7、退出后查看:

[root@fp-web-126 ~]# fdisk -l

Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0006d834

Device    Boot    Start     End      Blocks   Id   System
/dev/sda1 *     2048     1026047    512000   83   Linux
/dev/sda2      1026048   209715199 104344576 8e   Linux LVM

......
Disk /dev/sdb: 214.7 GB, 214748364800 bytes, 419430400 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xbd1a05e2

Device   Boot    Start     End      Blocks  Id    System
/dev/sdb1      2048     69905066   34951509+   83    Linux
/dev/sdb2      69906432  419430399  174761984    5   Extended
/dev/sdb5      209715199 419430399  104857600+   83   Linux
.....

其他部分我删除掉了,只保留这两个磁盘的相关信息。

8、这时需要给它设置文件系统并进行格式化。 

[root@fp-web-126 ~]# mkfs -t ext3  /dev/sdb5

mke2fs 1.42.9 (28-Dec-2013)
Could not stat /dev/sdb1 --- No such file or directory

The device apparently does not exist; did you specify it correctly?
//有时候会出现这种情况,这个需要单独处理

##出现上面的错误,我们重新读取下分区表
[root@fp-web-126 ~]#  partprobe   //情况依旧,待日后解决。

正常情况如下:
[root@fp-web-130 ~]# mkfs -t ext3 /dev/sdb5
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
6553600 inodes, 26214400 blocks
1310720 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
800 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872

截图如下

  给它设置ext3的文件系统,并格式化。EXT4是更高效高性能的系统,EXT4是Linux系统下的日志文件系统,是EXT3文件系统的后继版本,ext3目前只支持32000个子目录,而ext4取消了这一限制,理论上支持无限数量的子目录,xfs是一个64位文件系统,最大支持8EB减1字节的单个文件系统,对于一个32位Linux系统,文件和文件系统的大小会被限制在16TB

 

注意:由于126机器上出现异常,所以下面的操作继续在130机器上进行,过程都一样,130机器上很顺利完成相关操作,肯定是126主机环境有问题了,
执行格式化之前130和126机器都是执行了一样的,所以我执行过的命令都是在机器130进行了。


9、新建目录  /mnt/docker/storage (注意这个目录本身是sda2的第一个分区设置根目录,所以是把sdb5 挂载到这个目录下)

  挂载这个分区

[root@fp-web-130 ~]# mkdir -p /mnt/docker/storage  //循环创建目录
[root@fp-web-130 ~]# mount /dev/sdb5  /mnt/docker/storage  //回车

10、查看是否挂载成功:df -TH /mnt/docker/storage

[root@fp-web-130 ~]# df -TH /mnt/docker/storage
Filesystem Type  Size  Used Avail  Use% Mounted on
/dev/sdb5  ext3  106G  63M  101G   1%   /mnt/docker/storage

[root@fp-web-130 ~]# ll /mnt/docker/storage
total 16
drwx------ 2 root root 16384 Feb 5 01:03 lost+found

[root@fp-web-130 ~]# mount -l   //也会看到挂载的内容
.......

/dev/sdb5 on /mnt/docker/storage type ext3 (rw,relatime,data=ordered)

测试一下:

[root@fp-web-130 ~]# cd /mnt/docker/storage
[root@fp-web-130 storage]# touch a
[root@fp-web-130 storage]# rm -rf a

这样就可以正常使用了

查看下挂载情况

11、但是这种方式重启之后又要手动挂载怎么办? 

  这个时候就需要修改 /etc/fstab  

# /etc/fstab
# Created by anaconda on Mon Oct 24 02:05:13 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#

/dev/mapper/centos-root / xfs defaults 0 0
UUID=301c75d3-73ce-4342-befa-c8f1f788bcdf /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/sdb5 /mnt/docker/storage ext3 defaults 0 0

  重复以上操作,可以对sdb1等进行挂载

####格式化,在执行挂载
[root@fp-web-130 storage]#  mkfs -t ext3 /dev/sdb1
[root@fp-web-130 storage]#  mkfs -t ext3 /dev/sdb2

###这里查看下挂载情况

[root@fp-web-130 storage]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 96G 15G 82G 15% /
devtmpfs 7.9G 0 7.9G 0% /dev
tmpfs 7.9G 0 7.9G 0% /dev/shm
tmpfs 7.9G 1.1M 7.9G 1% /run
tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup
/dev/sda1 497M 109M 388M 22% /boot
/dev/dm-4 10G 53M 10G 1% /var/lib/docker/devicemapper/mnt/a4e27f437a05cb697cb7f3e0261124e29a488ce97391744342cd66d890c2ff55
shm 64M 0 64M 0% /var/lib/docker/containers/529add9c408291886a9845f85d0756af1b437ab00f773a167597976fb3652dda/mounts/shm
tmpfs 7.9G 12K 7.9G 1% /var/lib/kubelet/pods/d681bd53-2e90-11e9-bf20-0648b60020df/volumes/kubernetes.io~secret/etcd-certs
tmpfs 7.9G 12K 7.9G 1% /var/lib/kubelet/pods/00b2560f-1cbb-11ea-8086-06ce8e0020dd/volumes/kubernetes.io~secret/default-token-qplmz
tmpfs 7.9G 12K 7.9G 1% /var/lib/kubelet/pods/00d33be1-1cbb-11ea-8086-06ce8e0020dd/volumes/kubernetes.io~secret/fluentd-es-token-spb4t
tmpfs 7.9G 12K 7.9G 1% /var/lib/kubelet/pods/d681bd53-2e90-11e9-bf20-0648b60020df/volumes/kubernetes.io~secret/calico-node-token-bfmqf
tmpfs 7.9G 12K 7.9G 1% /var/lib/kubelet/pods/cf0364ed-1cbb-11ea-8086-06ce8e0020dd/volumes/kubernetes.io~secret/default-token-vrdcz
tmpfs 7.9G 12K 7.9G 1% /var/lib/kubelet/pods/2ffc40ad-27e1-11ea-8086-06ce8e0020dd/volumes/kubernetes.io~secret/default-token-qplmz
10.129.52.227:yfbredis4 197G 42G 148G 22% /var/lib/kubelet/pods/2ffc40ad-27e1-11ea-8086-06ce8e0020dd/volumes/kubernetes.io~glusterfs/storage-redis-4
tmpfs 7.9G 12K 7.9G 1% /var/lib/kubelet/pods/b4c1f5ed-2849-11ea-8086-06ce8e0020dd/volumes/kubernetes.io~secret/default-token-qplmz
/dev/dm-5 10G 34M 10G 1% /var/lib/docker/devicemapper/mnt/a1889e98c57c97a73f6331290ab6a324b2df2e56333836da9763d97377dc3786
shm 64M 0 64M 0% /var/lib/docker/containers/4206127eeb7f3633c63a1712be9ee316812c0fbc0a5e336fcbef65529d7583fc/mounts/shm
/dev/dm-7 10G 34M 10G 1% /var/lib/docker/devicemapper/mnt/53b03fa5e6af732d919c3ddfcb5fa399de31814a74e9cf0ddf8b3abd0c96c398
shm 64M 0 64M 0% /var/lib/docker/containers/034be6522c5aed98e53b353fb8cc299f3c155759b00b159e3433acb39c1836b9/mounts/shm
/dev/dm-8 10G 34M 10G 1% /var/lib/docker/devicemapper/mnt/bc0d3efd0720c1209caf990b9f8cee1de48a05164f6879d567f56fb579008d5c
shm 64M 0 64M 0% /var/lib/docker/containers/090852a3db1672ef7b8c884ecc6603c5e76b23a0430791e7a928c234d14db919/mounts/shm
/dev/dm-9 10G 34M 10G 1% /var/lib/docker/devicemapper/mnt/63c37e149cc24c5004c3a0214d358924deb5bc75364d61e55f5b59735be254e6
shm 64M 0 64M 0% /var/lib/docker/containers/d8234a1dbf96f1a393238cf6e3f9614bad63d84212858be6d57a9706938f694f/mounts/shm
/dev/dm-10 10G 34M 10G 1% /var/lib/docker/devicemapper/mnt/992487c32e7aee7db642e2f0bec2e5582a7e8078c920c2818dfe6e4cdca8d12a
shm 64M 0 64M 0% /var/lib/docker/containers/ca6c0211336bcf39d9202926d76ad6e79c8da8695e6b4290b77b99a40dfd51d0/mounts/shm
/dev/dm-6 10G 99M 9.9G 1% /var/lib/docker/devicemapper/mnt/8d7f8ffa2401c59bdffc00f08c51138f917895462f76d8e9ecec8b5ca21a24d0
/dev/dm-12 10G 34M 10G 1% /var/lib/docker/devicemapper/mnt/6b67665b3abc9ce1c956ad9ca4ce3f5af6af0ac45376c8635fac600249de7246
shm 64M 0 64M 0% /var/lib/docker/containers/a1ebe10c120e343fe934e6feeb12f5ccfeaacc5f734331cfe75f72238f992772/mounts/shm
/dev/dm-13 10G 53M 10G 1% /var/lib/docker/devicemapper/mnt/91f058ef6737db9d7590d1307725b230643ca9b62ab61448cc3f7ca149551994
/dev/dm-15 10G 103M 9.9G 2% /var/lib/docker/devicemapper/mnt/1fb4a9904476bb8d55fc45e70a58fa8bdee6076dedfe3bdd678674ebe27d8799
/dev/dm-16 10G 103M 9.9G 2% /var/lib/docker/devicemapper/mnt/dd60d269f58a0269247e962153862422e50173a9432e72799d3c66bcaf3d7688
/dev/dm-3 10G 299M 9.7G 3% /var/lib/docker/devicemapper/mnt/edbba54df531d54ce62f43155c402a262fb51abfd1984c1ce3a765677fdd6256
shm 64M 0 64M 0% /var/lib/docker/containers/27d7cf33e920ece1725c8d1c59566f13cd504491e900bcfe6df19ebbaf2310dc/mounts/shm
tmpfs 1.6G 0 1.6G 0% /run/user/0
/dev/sdb5 99G 60M 94G 1% /mnt/docker/storage

 
应用实例:


先保证docker,启动关闭正常
[root@fp-web-130 storage]# systemctl stop docker
[root@fp-web-130 storage]# systemctl start docker

 

查看docker配置

[root@fp-web-130 storage]# docker info
....

Data loop file: /var/lib/docker/devicemapper/devicemapper/data
Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata

...

Docker Root Dir: /var/lib/docker
....
//停止docker
[root@fp-web-118 mnt]# systemctl stop docker  
//文件拷贝或者利用rsync 工具同步
[root@fp-web-118 mnt]#cp -r /var/lib/docker/* /mnt/docker/storage  

//修改配置文件
[root@fp-web-118 /]#vi /usr/lib/systemd/system/docker.service  
.... 
ExecStart=/usr/bin/dockerd  --data-root /mnt/docker/storage
....

[root@fp-web-118 mnt]# systemctl daemon-reload ##重载配置文件
[root@fp-web-118 mnt]# systemctl start docker
 
//docker info查看


这里注意/dev/sdb5 是挂载到/mnt/docker/storage ,大小为166G,但是不等于说docker立即能使用全部的166G,我们依然看到Data Space Total 还是107.4GB
所以需要我们更改他的数据池大小默认值和sdb5的大小一致才行。否则大家讲讲也讲不通的。
更改方法见我的另一篇博文: 
https://www.cnblogs.com/aozhejin/p/15862394.html

 

[root@fp-web-130 ~]# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core)

[root@fp-web-130 ~]# uname -r
3.10.0-327.el7.x86_64

 

posted @ 2022-02-04 16:42  jinzi  阅读(3857)  评论(0编辑  收藏  举报