码迷,mamicode.com
首页 > 其他好文 > 详细

磁盘及磁盘管理相关知识

时间:2019-11-19 15:47:22      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:close   properly   比较   新分区   超过   类型   com   决定   irix   

1 磁盘的内部结构知识

1.1 磁盘相关的术语

英文 说明
Disk 磁盘
Head 磁头
Sector 扇区(一个扇区是512字节)
Track 磁道
Cylinder 柱面
Units 单元块(也是一个柱面的大小)
Block 数据块
Inode 索引节点

1.2 磁盘的内部结构图

  机械硬盘内部结构:所有盘片都是同时同步转动的,磁头寻道也是同步移动的.

技术图片

  盘片/扇区/磁道:

技术图片技术图片

   柱面:是所有盘面上相同半径的不同磁道的集合.

技术图片

  磁盘内部结构小结:   

  1)一块磁盘有2-14个盘片,每个盘片有2个面,每个面对应一个读写磁头,用磁头号来区分盘面,即盘面数就是磁头数,盘片数*2=磁头数(盘面数).

  2)不同盘面的磁道被划分为多个扇形区域,每个区域就是一个扇区(sector).

  3)同一个盘面,以盘片中心为圆心,每个不同半径的圆形轨迹就是一个磁道(track).

  4)不同盘面相同半径的磁道组成一个圆柱面就是柱面(cylinder).

  5) 一个柱面包含多个磁道(这些磁道的半径相同),一个磁道包含多个扇区.

  6)数据位置记录表示为:某磁头,某磁道(柱面),某扇区.

1.3 磁盘读写数据的工作原理

  1)磁盘是按照柱面为单位来读写数据的,先读取同一个盘面的某一个磁道.如果数据没有读完,磁头也不会切换到其他的磁道,而是选择切换磁头,读取下一个盘面相同半径的磁道,直到所有盘面相同半径的磁道读取完,而数据还没有读写完成,才会切换到其他不同半径的磁道,这个切换过程称为寻道(寻道需要做径向运动,会降低磁盘性能,速度慢).

  2)磁头寻道是机械运动(径向运动),需要步进电机来调节完成;而切换不同磁头来读写数据,则是电子切换.

技术图片

1.4 磁盘容量的计算方法 

######计算方法:
磁道大小=512字节*每磁道扇区数
盘面大小=磁道大小*磁道数
柱面大小=磁道大小*磁头数
Units单元块(一个柱面的大小)=512bytes字节
######
磁盘容量=盘面大小*磁头数
磁盘容量=512字节*每磁道扇区数*磁道数*磁头数
磁盘容量=柱面大小*柱面数(磁道数)
磁盘容量=512字节*每磁道扇区数*柱面数(磁道数)*磁头数

  计算磁盘容量实例:  

[root@test ~]# fdisk -l			#<===c6.x查看磁盘信息
Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0001f8e0

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26          52      204800   82  Linux swap / Solaris
Partition 2 does not end on cylinder boundary.
/dev/sda3              52        5222    41532416   83  Linux
[root@test ~]# echo 512*255*63*5221|bc			#计算磁盘的字节数
42944186880
[root@test ~]# echo 512*255*63*5221/1000/1000/1000|bc  #< 1GB=1000*1000*1000(大约bytes字节数)
42			#<==有63个扇区,而每个扇区的大小是512bytes字节
[root@test ~]# echo 512 255 63 5221|awk ‘{print $1*$2*$3*$4/1000/1000/1000}‘    
42.9442          #<==使用awk计算磁盘容量

2 磁盘分区知识

2.1 磁盘分区及命名(MBR)

  主分区Primary Partition:

  1)系统中必须存在的分区,系统会选择安装在主分区之上.

  2)主分区的编号为1-4,即最多只能分4个主分区.如果是3个主分区+1个扩展分区,则扩展分区上的逻辑分区编号只能从5开始.  

  3)主分区最少可以是1个,最多是4个.如一个硬盘划分为4个分区,可以有以下几种方法:

1P+1E(E中有3个L):主分区在操作系统中编号为sda1,逻辑分区编号显示为sda5,sda6,sda7.
2P+1E(E中有2个L):主分区在操作系统中编号显示为sda1,sda2,逻辑分区编号为sda5,sda6.
3P+1E(E中有1个L):主分区在操作系统中编号显示为sda1,sda2,sda3,逻辑分区编号为sda5.
4P(没有扩展分区):主分区在操作系统中编号显示为sda1,sda2,sda3,sda4. 

  扩展分区Extend Partition:

  1)扩展分区不能独立存在,也不能直接存放数据,必须在扩展分区上再划分逻辑分区,在逻辑分区上才能存放数据.

  2)扩展分区会占用硬盘分区表中一个主分区的编号(主分区+扩展分区<=4),在操作系统中扩展分区不会有编号.

  3)扩展分区有自己独立的分区表,在扩展分区上,可以划分多个逻辑分区,用于存放数据. 

  逻辑分区Logical Partition:

  1)逻辑分区存在于扩展分区之上,用于存放任意普通数据.

  2)逻辑分区的编号只能从5开始.

  查看分区的信息命令:

[root@git ~]# cat /proc/partitions 
major minor  #blocks  name
   8        0   41943040 sda
   8        1    1048576 sda1
   8        2   40893440 sda2
  11        0    4365312 sr0
 253        0   38789120 dm-0
 253        1    2097152 dm-1
[root@git ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   37G  1.5G   36G    4% /
devtmpfs                 899M     0  899M    0% /dev
tmpfs                    911M     0  911M    0% /dev/shm
tmpfs                    911M  9.5M  902M    2% /run
tmpfs                    911M     0  911M    0% /sys/fs/cgroup
/dev/sda1               1014M  142M  873M   14% /boot
tmpfs                    183M     0  183M    0% /run/user/0
[root@git ~]# partprobe /dev/sdb  #<===分区完成后必须执行此命令,让内核知道分区表已经修改

2.2 磁盘分区的本质说明

  对磁盘进行分区的本质示意图:

技术图片

  1)给磁盘进行分区的实质就是对磁盘的0磁头0磁道的1扇区的前446字节后的64bytes字节的分区表进行设置,即设置是主分区还是扩展分区,主要的目的是划分起始及结束磁头号,扇区号及柱面号,如上面的图片.

  2)注意:如果分区表已被分完,但还有空间没有被划分到分区,则这部分空间会被浪费掉,不能被使用了.解决的方法是,将一个主分区替换为扩展分区,把原来主分区的空间和剩余的空间一起放到扩展分区之上,再划分逻辑分区,才能被使用.

  3)在centos7中,默认以扇区为单位进行划分分区.

2.3 MBR

  在磁盘分区表格式为MBR的磁盘中,其0磁头0磁道的1扇区,即前512个字节,其中446字节是主引导记录,即BootLoader.然后,446字节后面有64字节即是用来记录分区表信息的.每个分区表信息占用16个字节,所以,MBR格式的硬盘最多只能划分4个主分区.还有2个字节是分区结束的标识位.如果有扩展分区,则扩展分区的16个字节记录信息指向扩展分区中扩展分区表的指针.

  如下图,是MBR磁盘分区表示例,在MBR磁盘分区表格式磁盘中,分区和启动信息是保存在一起的,如果这部分数据被覆盖或被破坏,只能重建MBR:

技术图片

2.4 GPT 

  GPT突破了MBR的限制,在每个磁盘上,最多能有128个主分区,一般的磁盘,容量超过2TB后,再使用MBR格式的分区表,其2TB后的容量就无法被识别使用,而GPT则是专门为了磁盘容量大于2TB的磁盘而设计的.

  在GPT磁盘分区表格式的磁盘中,可以保留多个分区和启动信息的副本,用于重建和恢复被破坏的信息,这些信息使用循环冗余校验码(CRC)以保证其完整性和正确性,如果这部分信息被破坏,GPT磁盘分区表格式的磁盘会发现这些被破坏的信息,从磁盘上的其他位置进行恢复. 

  下图是GPT磁盘分区表的信息,约占用17个字节:

技术图片

  EFI部分可以分为4个区域:EFI信息区(GPT头)、分区表、GPT分区区域和备份区域。
  1)EFI信息区(GPT头):起始于磁盘的LBA1,通常也只占用这个单一扇区。其作用是定义分区表的位置和大小。GPT头还包含头和分区表的校验和,这样就可以及时发现错误。
  2)分区表:分区表区域包含分区表项。这个区域由GPT头定义,一般占用磁盘LBA2~LBA33扇区,每扇区可存储4个主分区的分区信息,所以共能分128个主分区。分区表中的每个分区项由起始地址、结束地址、类型值、名字、属性标志、GUID值组成。分区表建立后,128位的GUID对系统来说是唯一的。
  3)GPT分区:最大的区域,由分配给分区的扇区组成。这个区域的起始和结束地址由GPT头定义。
  4)备份区:备份区域位于磁盘的尾部,包含GPT头和分区表的备份。它占用GPT结束扇区和EFI结束扇区之间的33个扇区。其中最后一个扇区用来备份1号扇区的EFI信息,其余的32个扇区用来备份LBA2~LBA33扇区的分区表。

2.5 热插拔磁盘如何不重启系统就被内核识别

  添加磁盘后,重新扫描scsi总线查看添加的新设备:

[root@test ~]# ls /sys//class/scsi_host/		#<===查看这里有多少个host编号
host0  host1  host2
[root@test ~]# echo "- - -" > /sys/class/scsi_host/host0/scan 		#<===扫描所有总线编号
[root@test ~]# echo "- - -" > /sys/class/scsi_host/host1/scan 		#<===有多少个host就执行多少遍
[root@test ~]# echo "- - -" > /sys/class/scsi_host/host2/scan
[root@test ~]# fdisk -l		#<==重新查看添加的设备
[root@test~]# for i in /sys/class/scsi_host/host*/scan;do echo "- - -" >$i;done  #使用for循环一条命令搞定

2.6 使用fdisk命令对MBR分区表类型磁盘进行分区

  fdisk只允许root用户使用,是linux下最常用的分区工具;fdisk适合对新硬盘,或安装了系统的硬盘(还有剩余空间)进行分区.

  fdisk分区的实质:即修改0磁头0磁道1扇区的前446字节后面的64字节分区表信息.

  注意:fdisk命令仅仅支持对小于或等于2TB的MBR分区表类型磁盘进行分区,以下是fdisk命令的详细参数:

[root@test ~]# fdisk /dev/sdb    #<==注意,fdisk命令仅在内存中生效
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x1a370d54 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):m
命令操作
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition         #<==删除分区,注意,删除扩展分区会连带逻辑分区一起删除
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   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)

命令(输入 m 获取帮助): 
[root@test ~]# partprobe /dev/sdb    #<==让内核重新识别新添加的分区
[root@test ~]# cat /proc/partitions   #<==能被内核识别的分区,在这里会有显示,识别后才可以格式化挂载使用
major minor #blocks name

11 0 1048575 sr0
8 0 41943040 sda
8 1 1048576 sda1
8 2 40893440 sda2
253 0 40366080 dm-0
253 1 524288 dm-1
8 16 1048576 sdb
######变更文件系统类型为LVM
命令(输入 m 获取帮助):p

磁盘 /dev/sdb:1073 MB, 1073741824 字节,2097152 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x37614724

设备 Boot Start End Blocks Id System
/dev/sdb1 2048 206847 102400 83 Linux

命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码):L

0 空 24 NEC DOS 81 Minix / 旧 Linu bf Solaris 
1 FAT12 27 隐藏的 NTFS Win 82 Linux 交换 / So c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 隐藏的 C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux 扩展 c7 Syrinx 
5 扩展 41 PPC PReP Boot 86 NTFS 卷集 da 非文件系统数据 
6 FAT16 42 SFS 87 NTFS 卷集 db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux 纯文本 de Dell 工具 
8 AIX 4e QNX4.x 第2部分 8e Linux LVM df BootIt 
9 AIX 可启动 4f QNX4.x 第3部分 93 Amoeba e1 DOS 访问 
a OS/2 启动管理器 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O 
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor 
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad 休 eb BeOS fs 
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT 
f W95 扩展 (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC 
11 隐藏的 FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor 
12 Compaq 诊断 5c Priam Edisk a9 NetBSD f4 SpeedStor 
14 隐藏的 FAT16 <3 61 SpeedStor ab Darwin 启动 f2 DOS 次要 
16 隐藏的 FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS 
17 隐藏的 HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE 
18 AST 智能睡眠 65 Novell Netware b8 BSDI swap fd Linux raid 自动
1b 隐藏的 W95 FAT3 70 DiskSecure 多启 bb Boot Wizard 隐 fe LANstep 
1c 隐藏的 W95 FAT3 75 PC/IX be Solaris 启动 ff BBT 
1e 隐藏的 W95 FAT1 80 旧 Minix 
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”

2.6.1 fdisk分区步骤整理  

######选择分区磁盘,并创建主分区
fdisk /dev/sdb	 #<==选择要分区的磁盘
n		 #<==创建主分区
p/e/l	      #创建哪种类型的分区
######如果分区是3P+1E,则输入 l 会直接进入下一步
N		#<==指定分区号
\n		#<==指定起始扇区号,默认值就直接回车即可
+N		#<==指定分区大小N
w		#<==保存退出
partprobe /dev/sdb &>/dev/null

2.6.2 fdisk非交互式对磁盘进行分区 

  2种方法,原理都是从标准输入中读取每次输入的操作:

  1)使用echo -e \n 再配合管道进行参数传递,注意的是回车操作需要使用\n换行符代替;

[root@test ~]# fdisk -l
磁盘 /dev/sdb:1073 MB, 1073741824 字节,2097152 个扇区
[root@test ~]# echo -e "n\np\n1\n\n+200M\nn\np\n2\n\n+200M\nw\n" | fdisk /dev/sdb    #<==如把1个1G的磁盘分2个200M的主分区
[root@test ~]# echo -e "d\n\nd\nw\n" | fdisk /dev/sdb    #<==删除上面创建的2个主分区,注意:如果是回车确认的操作,需要2个换行符 \n
[root@test ~]# echo -e "n\np\n1\n\n+200M\nn\np\n2\n\n+200M\nn\np\n\n\n\nw\n" | fdisk /dev/sdb  #<==分3个主分区,前2个主分区都是200M,剩余的空间都给第3个主分区
[root@test ~]# partprobe /dev/sdb &>/dev/null
[root@test ~]# cat /proc/partitions

  2)从文件中标准输入读取.

[root@test ~]# echo -e "n\np\n1\n\n+200M\nn\np\n2\n\n+200M\nn\np\n\n\n\nw\n" >a.txt
[root@test ~]# fdisk /dev/sdb <a.txt
[root@test ~]# partprobe /dev/sdb
[root@test ~]# cat /proc/partitions 

2.7 使用parted对GPT磁盘分区表的磁盘进行分区

  parted命令工具可以对任意大小的磁盘进行分区操作,但一般使用时,小于或者等于2TB的磁盘一般使用fdisk命令工具进行分区,而大于2TB的磁盘一般使用parted.

  parted命令工具分区的操作是实时同步的,直接写入磁盘分区表的.所以,在分区的时候一定要看清楚,哪个是要进行分区的磁盘,不要搞错.

  parted命令工具的参数说明(以下示例仅仅表示交互式操作用法,生产中一般使用非交互式操作):

[root@git ~]# parted /dev/sdb
GNU Parted 3.1
使用 /dev/sdb
Welcome to GNU Parted! Type ‘help‘ to view a list of commands.
(parted) help                                                             
  align-check TYPE N                        check partition N for TYPE(min|opt) alignment
  help [COMMAND]                           print general help, or help on COMMAND
  mklabel,mktable LABEL-TYPE               create a new disklabel (partition table)	#<==指定分区表类型,可以是gpt,也可以是msdos,msdos即是mbr格式分区表
  mkpart PART-TYPE [FS-TYPE] START END     make a partition		#<==分区命令,开始进行分区
  name NUMBER NAME                         name partition NUMBER as NAME
  print [devices|free|list,all|NUMBER]     display the partition table, available
        devices, free space, all found partitions, or a particular partition
  quit                                     exit program
  rescue START END                         rescue a lost partition near START and END	
  
  resizepart NUMBER END                    resize partition NUMBER
  rm NUMBER                                delete partition NUMBER		#<==删除分区
  select DEVICE                            choose the device to edit	#<==重选磁盘进入parted状态
  disk_set FLAG STATE                      change the FLAG on selected device
  disk_toggle [FLAG]                       toggle the state of FLAG on selected device
  set NUMBER FLAG STATE                    change the FLAG on partition NUMBER	
  toggle [NUMBER [FLAG]]                   toggle the state of FLAG on partition NUMBER
  unit UNIT                                set the default unit to UNIT		#<==设置分区默认单位,默认是M,可以设置为KB/MB/GB
  version                                  display the version number and copyright
        information of GNU Parted
(parted) mklabel gpt    #<==指定分区表类型                                           
警告: The existing disk label on /dev/sdb will be destroyed and all data on this disk will
be lost. Do you want to continue?
是/Yes/否/No? yes  		#<==交互式输入要输入yes
(parted) mkpart         #<==开始进行分区操作                                                 
分区名称?  []? p       #<==划分主分区                    	                              
文件系统类型?  [ext2]? ext4     #<==设置文件系统类型(这里设置没有用,后面还是要用mkfs命令格式化创建指定的文件系统类型)                                    
起始点? 1                       #<==分区起始位置,默认以 M 为单位,也可以使用set命令更改为G为单位                                         
结束点? 1024                    #<==结束位置,实际大小1024-1=1023M                                         
(parted) p                       #<==查看分区的结果                                         
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name  标志
 1      1049kB  1024MB  1023MB               p
(parted) mkpart p ext4 1025M 4096M		#<==也可以使用一条命令完成操作
警告: The resulting partition is not properly aligned for best performance.
忽略/Ignore/放弃/Cancel? Ignore        	#<==忽略警告                                   
(parted) p                              #<==查看结果                                 
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name  标志
 1      1049kB  1024MB  1023MB               p
 2      1025MB  4096MB  3071MB               p

(parted) mkpart e 4097 -1	#<==创建扩展分区,注意扩展分区无需指定文件系统类型,-1表示剩余的所有空间都分配给该分区
(parted) p                                                                
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name  标志
 1      1049kB  1024MB  1023MB               p
 2      1025MB  4096MB  3071MB               p
 3      4097MB  10.7GB  6640MB               e
 
(parted) mkpart l ext4 4098 -1		#<==继续创建逻辑分区,将剩余的空间都给逻辑分区
警告: You requested a partition from 4098MB to 10.7GB (sectors 8003906..20969567).
The closest location we can manage is 10.7GB to 10.7GB (sectors 20969472..20969472).
Is this still acceptable to you?
是/Yes/否/No? yes                                                         
(parted) p                                                                
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name  标志
 1      1049kB  1024MB  1023MB               p
 2      1025MB  4096MB  3071MB               p
 3      4097MB  10.7GB  6640MB               e
 4      10.7GB  10.7GB  512B                 l
(parted) rm 4           	#<==删除分区                                                  
(parted) p                                                                
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name  标志
 1      1049kB  1024MB  1023MB               p
 2      1025MB  4096MB  3071MB               p
 3      4097MB  10.7GB  6640MB               e

2.7.1 parted使用非交互式进行分区操作

  MBR磁盘分区表格式磁盘使用parted进行分区:

#####如:一个10G的硬盘进行分区,划分2个5G的分区(磁盘分区表类型为MBR)
[root@git ~]# parted -s /dev/sdb mklabel msdos		#<==设置磁盘分区类型为MBR
[root@git ~]# parted /dev/sdb mkpart primary ext4 1 5000	#<==这里分别表示文件主分区partition type/文件系统类型fstype/其实位置start/结束位置end
[root@git ~]# parted /dev/sdb mkpart primary ext4 5001 10000
[root@git ~]# partprobe /dev/sdb
[root@git ~]# fdisk -l /dev/sdb    #<===检查
#####注意:小于2TB的磁盘尽量使用fdisk,方便少出错

  GPT磁盘分区表格式磁盘使用parted进行分区:

#####如:一个10G的硬盘进行分区,划分2个5G的分区(磁盘分区表类型为GPT)
[root@git ~]# parted -s /dev/sdb mklabel gpt  	#<==parted的 -s 参数相当于交互模式下输入yes,设置分区表类型时可以加入此参数忽略提示
[root@git ~]# parted /dev/sdb mkpart 1 ext4 1M 5000M  	#<==划分第一个分区,这里分别表示分区号name/文件系统类型fstype/开始位置start/结束位置end	
[root@git ~]# parted /dev/sdb mkpart 2 ext4 5001M 10000M	#划分第二个分区
[root@git ~]# partprobe /dev/sdb 		
[root@git ~]# fdisk -l /dev/sdb		#<==检查

3 管理文件系统  

  文件系统是计算机组织和存储数据的一种机制或方法.创建文件系统之前,必须对分区进行格式化.

3.1 常用格式化工具命令

  常用的格式化命令有mkfs,mke2fs,格式化的过程就是在创建文件系统,分配inode和block.

  格式化完成后,就可以挂载使用了.

3.2 挂载/卸载文件系统

  使用mount和umount分别挂载和卸载文件系统.

  mount命令的常用参数(ext文件系统):

mount [-t 欲挂载文件系统类型 ] [-o 特殊选项] 设备名 挂载目录

选项说明:
-a  将/etc/fstab文件里指定的挂载选项重新挂载一遍。
-t  支持ext2/ext3/ext4/vfat/fat/iso9660(光盘默认格式)。 不用-t时默认会调用blkid来获取文件系统类型。
-n  不把挂载记录写在/etc/mtab文件中,一般挂载会在/proc/mounts中记录下挂载信息,然后同步到/etc/mtab,指定-n表示不同步该挂载信息。
-o  指定挂载特殊选项。下面是两个比较常用的:
    loop  挂载镜像文件,如iso文件(常用)
    ro  只读挂载(常用)
    rw  读写挂载(常用)
    auto  相当于mount -a
    dev 如果挂载的文件系统中有设备访问入口则启用它,使其可以作为设备访问入口
    default rw,suid,dev,exec,auto,nouser,async,and relatime
    async   异步挂载,只写到内存
    sync    同步挂载,通过挂载位置写入对方硬盘
    atime   修改访问时间,每次访问都修改atime会导致性能降低,所以默认是noatime
    noatime 不修改访问时间,高并发时使用这个选项可以减少磁盘IO
    nodiratime  不修改文件夹访问时间,高并发时使用这个选项可以减少磁盘IO
    exec/noexec  挂载后的文件系统里的可执行程序是否可执行,默认是可以执行exec, 优先级高于权限的限定
    remount  重新挂载,此时可以不用指定挂载点(常用)
    suid/nosuid 对挂载的文件系统启用或禁用suid,对于外来设备最好禁用suid
    _netdev 需要网络挂载时默认将停留在挂载界面直到加载网络了。使用_netdev可以忽略网络正常挂载。如NFS开机挂载。
    user  允许普通用户进行挂载该目录,但只允许挂载者进行卸载该目录
    users  允许所有用户挂载和卸载该目录
    nouser  禁止普通用户挂载和卸载该目录,这是默认的,默认情况下一个目录不指定user/users时,将只有root能挂载

  查看挂载的参数信息:

[root@test ~]# cat /proc/mounts 

  umount + 挂载点/设备名 , 即可卸载,常用的参数是 umount -lf 强制卸载.

[root@test ~]# fuser -v /root    #<==查看谁在使用挂载点
                     用户     进程号 权限   命令
/root:               root      102287 ..c.. bash
[root@test ~]# fuser -km /mnt/cdrom;umount /mnt/cdrom  #<==杀掉进程,然后卸载
[root@test ~]# umount -lf /mnt/cdrom   #<==强行卸载

3.2.1 常用查看文件系统信息命令

  查看磁盘各分区的文件系统类型,挂载点,及UUID.(UUID是唯一标识符,云服务器上一般使用UUID挂载并写入/etc/fstab文件中)

[root@test ~]# lsblk   #<==列出设备状态,以下是每列的含义
#名称  #主设备号 #此设备号 #0为不可卸载,1是可卸载设备 #空间大小 #是否只读 #磁盘/分区/lvm等  #挂载点
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   40G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   39G  0 part 
  ├─centos-root 253:0    0 38.5G  0 lvm  /
  └─centos-swap 253:1    0  512M  0 lvm  [SWAP]
sdb               8:16   0    1G  0 disk 
sr0              11:0    1 1024M  0 rom  
[root@test ~]# lsblk -f  #<==此参数可以查看UUID
NAME            FSTYPE      LABEL UUID                                   MOUNTPOINT
sda                                                                      
├─sda1          xfs               4bfd42b4-8dae-41a8-bca9-d91b5c8f44b4   /boot
└─sda2          LVM2_member       T9nVz7-q4QF-ZRU1-blzS-dy0M-UMJR-gugk4i 
  ├─centos-root xfs               6a9e594d-f782-43e5-a796-7cd6d1ca1f27   /
  └─centos-swap swap              3dac4a09-06ce-4599-84db-07f7411ae62f   [SWAP]
sdb                                                                      
sr0                                                                      
[root@test ~]# blkid  #<==查看各分区的UUID
/dev/sda1: UUID="4bfd42b4-8dae-41a8-bca9-d91b5c8f44b4" TYPE="xfs" 
/dev/sda2: UUID="T9nVz7-q4QF-ZRU1-blzS-dy0M-UMJR-gugk4i" TYPE="LVM2_member" 
/dev/mapper/centos-root: UUID="6a9e594d-f782-43e5-a796-7cd6d1ca1f27" TYPE="xfs" 
/dev/mapper/centos-swap: UUID="3dac4a09-06ce-4599-84db-07f7411ae62f" TYPE="swap" 
/dev/sdb: PTTYPE="dos" 

3.3 /etc/fstab配置文件说明

  从操作系统的启动流程可以知道,该文件的重要性.如果此文件配置错误,操作系统可能起不来.一般后两项都是设置为0.  

技术图片

3.3.1 单用户模式下修复/etc/fatab  

  单用户模式下,根文件系统是只读的,root用户也无法修改,所以应将 / 重新挂载为可读写,然后才可以编辑 /etc/fatab 文件.

[root@test ~]# mount -n -o remount,rw /

 

磁盘及磁盘管理相关知识

标签:close   properly   比较   新分区   超过   类型   com   决定   irix   

原文地址:https://www.cnblogs.com/blog-tim/p/11855998.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!