• 博客访问: 1911569
  • 博文数量: 580
  • 博客积分: 10716
  • 博客等级: 上将
  • 技术积分: 7226
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-01 22:35
文章分类

全部博文(580)

文章存档

2017年(35)

2016年(22)

2015年(1)

2013年(12)

2012年(20)

2011年(18)

2010年(18)

2009年(271)

2008年(183)

微信关注

IT168企业级官微



微信号:IT168qiye



系统架构师大会



微信号:SACC2013

订阅
热词专题
Linux磁盘分区深度解析 2017-05-09 09:16:00

分类: LINUX

1.什么是磁盘

磁盘就是存储计算机数据的地方,而目前市场上主流磁盘大概有SATA(IDE接口)、SAS(并行SCSI接口)、SSD(SATA2和SATA3接口或PATA (IDE接口) PCI-E接口)

2.SATA、SAS和SSD固态硬盘有何优缺点(SAS介于两者之间)

项目名称 固态硬盘 传统机械硬盘
随机存取
写入次数

MLC:1万次

SLC:10万次

特制:10-500万

无限制
磁盘阵列 可以组成磁盘阵列
工作噪音
工作温度 一般
防震 很好
数据恢复

3.生产中磁盘性能选择

企业生产场景普及程度:SAS>SATA>SSD
单位容量对比性能和价格:SSD>SAS>SATA(一块SSD,和一块SATA)
单位价格购买磁盘容量:SATA>SAS>SSD

一般情况下磁盘选择:

1)线上的业务,用SAS磁盘。

2)线下的业务,用SATA磁盘。

3)线上高并发、小容量的业务,SSD磁盘。

了解到上面选择磁盘之后我们来看下淘宝案例,如何抵御大流量访问?

首先访问这个网站 http://server.51cto.com/News-318584.htm,淘宝服务器采用低能耗(特制CPU) 下面是截取的一段话:“ 淘宝CDN缓存对象具有的特征是:18KB以下的对象数量占总数量的80%,而存储量只有不到40%;同时,80%被访问对象所占用的存储空间不到20%。这意味着“热数据”(访问频次高的内容)占的空间其实很小,而“冷数据”(访问频次低的内容)所需存储量很大。因此,淘宝特意为该低功耗服务器引入分层存储机制,所以单台低功耗服务器的硬盘其实是由一块80GB的SSD盘和两块500GB的SATA盘组成。这样,“热数据”存放在SSD盘上,“冷数据”就存放在SATA盘上,从而兼顾速度、容量与成本。而分层存储调度软件则由淘宝独立开发 ”。

在兼顾成本以及性能上淘宝采取的"热点备份(SSD+SATA) " ,把经常使用到的数据放在ssd固态硬盘,不经常调用的数据放在SATA盘

4.磁盘的内部结构

磁盘的内部结构包括:盘片、磁头、盘片主轴、控制电机、磁头控制器、接口、缓存、数据转换器等几个部分,下面通过一个图片来进一步认识一下磁盘内部结构的划分,并通过此图来计算磁盘的大小

上图黑色一圈表示磁道;蓝色盘上下两面叫做盘面;上图三角形形成的区域叫做扇区(一个扇区是512字节),由磁道所组成的同心圆形成的主题叫做柱面

那么磁盘容量的大小=512*扇区(个数)*磁头*磁道*

[root@lx ~]# fdisk -l /dev/sdb

Disk /dev/sdb: 106 MB, 106954752 bytes

64 heads(磁头), 32 sectors/track(扇区), 102 cylinders(磁道)

Units = cylinders of 2048 * 512 = 1048576 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x000602e5

磁盘容量=32*512*64*102=106MB

[root@lx ~]# echo "32*512*64*102/1000/1000"|bc

106

5.磁盘分区知识

下面让我们来看看这两个图,进一步了解磁盘的结构

由此上图我们得知当系统开机开机自检,加载MBR引导程序(前446字节是MBR引导程序,后64字节是分区表),而系统的启动是从磁盘的0磁(0柱面)头0磁道1扇区启动的,分区表被划分为4个分区,并且以55AA作为结束标识符。下面是如何查看的方法

[root@lx ~]# dd if=/dev/sdb of=/tmp/mbr bs=512 count=1 1+0 records in 1+0 records out 512 bytes (512 B) copied, 0.000977346 s, 524 kB/s
[root@lx ~]# od -Ax -tx1 /tmp/mbr 000000 fa b8 00 10 8e d0 bc 00 b0 b8 00 00 8e d8 8e c0 000010 fb be 00 7c bf 00 06 b9 00 02 f3 a4 ea 21 06 00 000020 00 be be 07 38 04 75 0b 83 c6 10 81 fe fe 07 75 000030 f3 eb 16 b4 02 b0 01 bb 00 7c b2 80 8a 74 01 8b 000040 4c 02 cd 13 ea 00 7c 00 00 eb fe 00 00 00 00 00 000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 * 0001b0 00 00 00 00 00 00 00 00 e5 02 06 00 00 00 00 00 0001c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 * 0001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa

这个地方我之前使用dd if=/dev/sdb1 of=/tmp/mbr bs=512 count=1,然后通过od -Ax -tx1 /tmp/mbr怎么都查看不到我想要看的分区表结束标识符 55AA;其实这是个误区 ,sdb1是在分区表里,是磁盘的第一个分区,故磁盘的第一个扇区包含的信息不可能存在分区里面,应该在sdb这个磁盘设备里面】

磁盘的分区表可以划分为4个分区:第1分区,第二分区,第三分区,第四分区各16字节。

例如现在有一块磁盘/dev/sda我想要划分6个分区,改如何划分,磁盘的分区号又是如何开始的?

方案1:3P+3L(1E)  ;磁盘分区号:/dev/sda1;/dev/sda2;/dev/sda3;/dev/sda5;/dev/sda6;/dev/sda7

方案2:2P+4L(1E);磁盘分区号: /dev/sda1;/dev/sda2; /dev/sda5;/dev/sda6;/dev/sda7;/dev/sda8

方案3:1P+5L(1E); 磁盘分区号: /dev/sda1; /dev/sda5;/dev/sda6;/dev/sda7;/dev/sda8;/dev/sda9

小结:一个磁盘只能划分4个主分区,如果磁盘还有剩余空间,那将造成浪费;同时一个磁盘也可以划分扩展分区,扩展分区可以划分多个逻辑分区

案例:

1.什么是buffer,什么是cache?

buffer:表示数据从内存写入到磁盘的过程;cache:表示数据从磁盘读入到内存的过程

2.什么是MBR,MBR损坏如何恢复?

linux主机开机启动,会加载MBR启动引导程序,MBR启动引导程序存在硬盘的0磁道0柱面1扇区的前446字节,而1扇区后64字节存放的分区表,而后面还有两字节存放的是分区表的结束标识符55AA

1)模拟MBR引导程序损坏:删除MBR引导程序文件

[root@lixiang grub]# rm grub.conf

rm: remove regular file `grub.conf'? y

    2)重启系统reboot,此时我们看见系统出现了下面画面

    3)首先大家可以使用find (hd0,0)/后面接tab按键

4)输入root (hd0,0),出现下图:

 5)输入kernel /vmlinuz-2.6.32-504.el6.x86_64   ro root=/dev/sda1 rhgb quiet , 或者 输入 kernel /vmlinuz-2.6.32-504.el6.x86_64   ro root=LABEL=/ rhgb quiet (此法通用) 【 注意由于我的是Centos6.6版本的,你可以从其他地方拷贝试试,具体文件在这个地方/boot/grub/grub.conf,这个内容是我先记录下来的 ro root=UUID=2acb0807-4ecd-4305-a2e9-28446b3d85ca rd_NO_LUKS rd_NO_LVM.UTF-8;不过忘记也没有关系下面我还会交另外一种方法来恢复】

6)输入initrd /initramfs-2.6.32-504.el6.x86_64.img

7)最后一步boot重启,下面奇迹的时刻发生了,系统就会成功启动。不过只是这一次成功登陆,下次登陆仍然会出现这个问题,所以我将我备份的grub.conf.bak更改为grub.conf

MBR恢复方法二:

通过光盘恢复救援模式恢复,下面是具体恢复方法:

1)开机启动选择加载光盘启动,选择救援模式

2)选择默认即可

3)选择OK

4)网络选择NO

5)选择continue

6)默认ok

7)选择shell Start shell,选择Ok

8)执行命令chroot /mnt/sysimage

9)下面执行mv /boot/grub/grub.conf.bak /boot/grub/grub.conf

10)设置本地硬盘启动,重新启动系统就可以了

6.磁盘挂载,如果磁盘容量小于2T可以使用fdisk挂载,如果大于2T使用parted挂载

1)下面让我们来做一下,例如将/dev/sdb磁盘划分为两个区,1P+1L

[root@lx ~]# fdisk /dev/sdb
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
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
Command action
	e	extended
	p	primary partition (1-4)
p
Partition number (1-4): 1 First cylinder (1-102, default 1): 
Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-102, default 102): +20MB
Command (m for help): n
Command action
	e	extended
	p	primary partition (1-4)
e
Partition number (1-4): 2 First cylinder (21-102, default 21): 
Using default value 21 Last cylinder, +cylinders or +size{K,M,G} (21-102, default 102): 
Using default value 102 Command (m for help): p
Disk /dev/sdb: 106 MB, 106954752 bytes 64 heads, 32 sectors/track, 102 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000602e5
	Device Boot		Start			End		Blocks	Id  System
/dev/sdb1 1 20 20464 83 Linux
/dev/sdb2 21 102 83968 5 Extended
Command (m for help): n
Command action
	l	logical (5 or over)
	p	primary partition (1-4)
l
First cylinder (21-102, default 21): 
Using default value 21 Last cylinder, +cylinders or +size{K,M,G} (21-102, default 102): 
Using default value 102 Command (m for help): p
Disk /dev/sdb: 106 MB, 106954752 bytes 64 heads, 32 sectors/track, 102 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000602e5
	Device Boot		Start			End		Blocks	Id  System
/dev/sdb1 1 20 20464 83 Linux
/dev/sdb2 21 102 83968 5 Extended
/dev/sdb5 21 102 83952 83 Linux
分区完毕之后,我们可以使用mkfs -t ext4 格式化分区
[root@lx ~]# mkfs -t ext4 /dev/sdb1
挂载分区,将sdb1挂载到/tmp目录下
[root@lx ~]# mount /dev/sdb1 /tmp 
将文件挂载文件写入开机自启动
UUID=2acb0807-4ecd-4305-a2e9-28446b3d85ca /							  ext4	 defaults 1 1 UUID=edab26eb-e5da-47e2-914b-40f4bdf8347d /boot						 ext4	 defaults 1 2 UUID=ff7ab69d-bdc2-40cd-816f-8c30a3e76737 swap						  swap	 defaults 0 0 tmpfs						 /dev/shm					 tmpfs	defaults 0 0 devpts						/dev/pts					 devpts  gid=5,mode=620 0 0 sysfs						 /sys						  sysfs	defaults 0 0 proc						  /proc						 proc	 defaults 0 0 /dev/sdb1					/tmp						  ext4	 defaults 0 0 ~ "/etc/fstab" 16L, 841C written	 
[root@lx ~]# mount -a	#检测挂载是否有问题
[root@lx ~]# tune2fs -c -1 /dev/sdb1
tune2fs是调整和查看ext2/ext3文件系统的文件系统参数,Windows下面如果出现意外断电死机情况,下次卡机一般都会出现系统自检。Linux系统下面也有文件系统自检,而且是可以通过tune2fs命令,自定义自检周期及方式

现在我们在模拟一下,将硬盘用parted分区

[root@lx ~]# parted /dev/sdb
GNU Parted 2.1 Using /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
  check NUMBER do a simple check on the file system cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER copy file system to another partition help [COMMAND] print general help, or help on COMMAND
  mklabel,mktable LABEL-TYPE		   create a new disklabel (partition table)
  mkfs NUMBER FS-TYPE make a FS-TYPE file system on partition NUMBER
  mkpart PART-TYPE [FS-TYPE] START END make a partition
  mkpartfs PART-TYPE FS-TYPE START END make a partition with a file system move NUMBER START END move partition NUMBER
  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 resize NUMBER START END resize partition NUMBER and its file system rm NUMBER delete partition NUMBER
  select DEVICE				    choose the device to edit 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 version display the version number and copyright information of GNU Parted
(parted) mklabel gpt									
Warning: 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? y (parted) p Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 107MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number  Start  End  Size  File system Name  Flags
(parted) mkpart primary 0 30 Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? I									    
(parted) p Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 107MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number  Start   End     Size    File system Name     Flags 1 17.4kB 30.0MB 30.0MB		   primary
(parted) mkpart logical 30 106 (parted) p Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 107MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number  Start   End     Size    File system Name     Flags 1 17.4kB 30.0MB 30.0MB		   primary 2 30.4MB 106MB 75.5MB		   logical
(parted) q

此时需要将新建分区写入内核 partprobe /dev/sdb

[root@lx ~]# parted /dev/sdb p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 107MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number  Start   End     Size    File system  Name     Flags 1 17.4kB 30.0MB 30.0MB	       primary 2 30.4MB 106MB 75.5MB	       logical
[root@lx ~]# mkfs.ext4 /dev/sda1
mke2fs 1.41.12 (17-May-2010)
/dev/sda1 is mounted; will not make a filesystem here! [root@lx ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks 7328 inodes, 29280 blocks 1464 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=30146560 4 block groups 8192 blocks per group, 8192 fragments per group 1832 inodes per group
Superblock backups stored on blocks: 8193, 24577 Writing inode tables: done			    
Creating journal (1024 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 24 mounts or 180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@lx ~]# mkfs.ext4 /dev/sdb2
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks 18432 inodes, 73728 blocks 3686 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008 9 block groups 8192 blocks per group, 8192 fragments per group 2048 inodes per group
Superblock backups stored on blocks: 8193, 24577, 40961, 57345 Writing inode tables: done			    
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 32 mounts or 180 days, whichever comes first.  Use tune2fs -c or -i to override

最后一行出现了tune2fs -c or -i to override,这个是linux文件系统询问自检的,需要设置tune2fs -c -1 /dev/sdb1 ;tune2fs -c -1 /dev/sdb2这样就不会出现巡检文件系统了

阅读(262) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册