linux添加新磁盘和创建分区(fdisk创建实操)


 写这篇的目的,还是要把整个过程记录下来,特别是小细节的地方,不操作只凭看是没有用的,所以做这个行业就是要多动手,多学习,多思考
 慢慢你的思路也会打开。练就自己的学习能力很重要。由于时间比较仓促,难免会有遗漏的点,我每一篇文章都可能会进行相关的纠正,包括格式和叙述方式等,还望见谅

一、 基础知识

我们管理的服务器可能会随着业务量的不断增长造成磁盘空间不足的情况,在这个时候我们就需要增加磁盘空间,这里我们主要介绍如何使用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年出来的运维工程师连基础操作都不具备,出去找工作也是被人诟病。
如果是几台服务器,公司业务也没有起色也罢,也谈不上什么运维规划,但是职业技能总该提高吧,网上资源还是很丰富的,但是说实在的很多写的不是很细致,所以我这段写的先铺面,后进行整理
力求做到不误导别人。

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

二、创建分区

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

1、 fdisk -l 查看磁盘情况 


lsblk命令可以列出所有可用块设备的信息,比如我们说的逻辑磁盘,默认情况下将以树状列出所有块设备。



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

 lsblk命令输出结果解释:

 NAME : 该项这是块设备名。
 MAJ:MIN : 该项显示主要和次要设备号。
 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

  挂载这个分区

[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查看