一、linux中常见的磁盘:
无论什么操作系统,归根还是要落实与磁盘上的,对于磁盘的管理也是linux管理必备的一项技能。在linux中“一切皆文件”的思想贯彻整个linux的学习中,包括像是磁盘等的硬件也是在linux的/dev/目录下类似于文件形式的存放,常见的SATA口USB优盘或是SCSI口的硬盘在linux中是以/dev/sd[a-p]开头的文件,早期的IDE硬盘现在已经很少见了,这种硬盘在linux中是以/dev/hd[a-d],CDROM是以/dev/cdrom开头的文件,磁带机/dev/st0(SCSI口的),/dev/ht0(IDE口)。每一种设备都有特定的主设备号和次设备号,主设备号用来标识设备类型,次设备号标识同一类型设备的不同设备。不同类型的接口的设备速度也是有很大差别的,像是并口的IDE的接口理论值为133MB/s,SCSI硬盘速度为640MB/s 。串口的SATA和SAS口的硬盘速度都是6Gbps,在转化为同一单位的情况下后者的速度还是远远优于前者。串口的USB速度也能达到480MB/s
二、 磁盘结构与术语:
硬盘的物理结构一般由磁头与盘片、电动机、主控芯片与排线等部件组成;当主电动机带动盘片旋转时,副电动机带动一组( 磁头)到相对应的盘片上并确定读取正面还是反面的碟面,磁头悬浮在碟面上画出一个与盘片同心的圆形轨道( 磁轨或称 柱面),这时由磁头的磁感线圈感应碟面上的磁性与使用硬盘厂商指定的读取时间或数据间隔定位 扇区,从而得到该扇区的数据内容;

磁头(head):对磁盘的数据进行读写
磁道(track):当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道。 磁盘上的磁道是一组记录密度不同的同心圆
扇区(sector):磁盘上的每个磁道被等分为若干个弧段,这些弧段便是硬盘的扇区。硬盘的第一个扇区,叫做引导扇区。 一个扇区的大小为512个字节。
柱面(cylinder):在有多个盘片构成的盘组中,由不同盘片的面,但处于同一半径圆的多个磁道组成的一个圆柱面。
三、分区类型:
1. 磁盘分区的优点:
(1) 优化I/O性能
(2)实现磁盘的空间配额限制
(3)提高修复速度
(4)隔离系统和程序
(5)分区可以安装多个OS
2. 两种分区方式:MBR和GPT
MBR:(master boot recorder )传统的分区都是以MBA的方式分区的使用32位作为扇区数,分区大小不差过2T,分区是按照柱面来分区(CHS:cylinder,head,sector),在MBR中有LBA地址用来和CHS转换,LBA地址是统一的逻辑区块地址作为寻址方式,这种寻址模式取代了原先 操作系统必须面对存储设备硬件构造的方式。在硬盘上的0磁道0扇区共512个字节存放MBR硬盘分区分区表和主引导程序,其中前446个字节存放引导程序,64个字节存放4个大小为16个字节的分区表,最后还有两个字节(0x55AA)是分区结束标志。

(可以通过十六进制查看器查看,先通过dd命令将硬盘的前512个字节备份成一个二进制文件,在通过hexdump 查看)
[root@centos7 ~]# dd if=/dev/sdc of=sdc count=512 bs=1 512+0 records in 512+0 records out 512 bytes (512 B) copied, 0.00509351 s, 101 kB/s [root@centos7 ~]# hexdump -C sdc 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 000001b0 00 00 00 00 00 00 00 00 91 83 ce 77 00 00 00 20 |...........w... | 000001c0 21 00 83 9d 11 4c 00 08 00 00 00 c0 12 00 00 9d |!....L..........| 000001d0 12 4c 83 db 29 72 00 c8 12 00 00 60 09 00 00 00 |.L..)r.....`....| 000001e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.| 00000200 [root@centos7 ~]# dd if=sdc_head of=/dev/sdc bs=1 count=64 skip=446 seek=446 //skip表示源文件跳过多少开始复制,seek表示目标跳过多少开始 64+0 records in 64+0 records out 64 bytes (64 B) copied, 0.0170671 s, 3.7 kB/s 注释:其中4个分区最多可以建立4个主分区,或者3个主分区加一个扩展分区,主分区结构如上,第一个字节表示此分区是否处于活动分区状态,80表示活动,00表示非活动,活动分区可以用来存放操作系统。第二个字节表示磁头号,第3和4字节存放扇区号第5个字节表示分区类型,0表示分区未使用。5,6,7字节表示分区结束的磁头号,扇区和柱面号。后面的八个字节用来存放LBA地址,用来做CHS和LBA地址转化用的。扩展分区中存放着逻辑分区的地址,在逻辑分区的第一个扇区也是存放着EBR表,结构与MBR类似,只不过前面的446字节都空着,存放64字节的表中第一个表项的16个字节指向本个逻辑分区,下一个16个字节的表项中存放指向下一个扩展分区的EBR,接下来便是两个空白的表项和类似于MBR的结束标志0x55AA。
3.GPT分区:
GPT分区是新一代的分区方式,可支持多分区(最多128个分区)和大分区(磁盘块大小为512字节时可支持8Z,4096字节的块大小时可以达到64Z。注Z的数量级为270)。GPT使用128位的UUID作为磁盘和分区的同一唯一标识符,并且在GPT分区表自动备份在头尾两部分,并伴有CRC校验位,在GPT分区的首部有一个伪MBR,用于向下兼容MBR,因为MBR是不能理解GPT分区的,在GPT分区首部放置一个伪MBR首部可以防止MBR认为当前磁盘没有分区,而将GPT分区覆盖。

四、几种分区工具:
1.图形化工具gnome-disks使用简单,在此不在赘述。
2.fdisk使用:
fdisk支持MBR,也支持GPT分区,对于一块硬盘最多只能理解15个分区,一般使用fdisk做MBR分区,gdisk做GPT分区。下面为fdisk分区示例:
[root@centos7 ~]# fdisk /dev/sde Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table Building a new DOS disklabel with disk identifier 0xf734a8be. 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 //删除分区 g create a new empty GPT partition table //创建GPT分区表 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) Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-41943039, default 2048): Using default value 2048 Last&n五、文件系统的挂载mount:
1. 挂载命令mount使用:
(1)挂载: 将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为,挂载点下原有文件在挂载完成后会被临时隐藏
(2) 卸载:为解除此关联关系的过程,可使用设备,也可以使用挂载点
(3) 用法:
mount 设备 挂载点
设备类型:
1) 可以使用设备文件如/dev/sda;
2) 可以使用卷标如SDA_LABEL;
3) 可以使用UUID;
4) 伪文件系统;proc,sysfs……
5) dd创建的image文件使用loop选项
6) 目录挂载至目录,使用bind或-B,fstab配置文件分区类型为none
(4) mount 常用选项:
-t 指定文件系统类型
-r 只读挂载
-w 读写挂载
-n 不更新/etc/mtab,通过mount看不到挂载的文件系统,只有cat /proc/mounts
才可以看到
-a 自动挂载所有支持自动挂载的设备。定义在/etc/fstab中且支持auto功能
-L 以卷标指定的设备挂载
-U 以UUID指定的挂载设备
-B --bind 绑定一个目录到另一个目录
[root@centos7 mnt]# mount -B /root/ /mnt/root配置文件写法:
[root@centos7 smb]# tail -n1 /etc/fstab /root/ /mnt/root none bind,defaults 0 0 [root@centos7 mnt]# mount |grep "root" /dev/sda2 on /mnt/root type xfs (rw,relatime,seclabel,attr2,inode64,noquota)挂载 windows 的共享文件夹:
[root@centos7 mnt]# mount -o username=administrator,password=admin -t cifs //10.1.1.88/f /mnt/smb挂载 loop 设备:
[root@cnode6_8 /]# dd if=/dev/zero of=/testdir/loopdev bs=1M count=50 //dd创建一个文件 50+0 records in 50+0 records out 52428800 bytes (52 MB) copied, 2.04763 s, 25.6 MB/s [root@cnode6_8 /]# mkfs.ext4 /testdir/loopdev //将改文件格式化为ext4 mke2fs 1.41.12 (17-May-2010) /testdir/loopdev is not a block special device. Proceed anyway? (y,n) y ====> 回答y开始格式化 Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) Stride=0 blocks, Stripe width=0 blocks 12824 inodes, 51200 blocks 2560 blocks (5.00%) reserved for the super user First data block=1 Maximum filesystem blocks=52428800 7 block groups 8192 blocks per group, 8192 fragments per group 1832 inodes per group Superblock backups stored on blocks: 8193, 24577, 40961 Writing inode tables: done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 30 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. [root@cnode6_8 /]# mkdir /mnt/loopdev //创建挂载点 [root@cnode6_8 /]# mount -o loop /testdir/loopdev /mnt/loopdev //手动挂载 [root@cnode6_8 /]# mount |grep loop //检验是否成功 /testdir/loopdev on /mnt/loopdev type ext4 (rw,loop=/dev/loop0) [root@cnode6_8 /]# umount /mnt/loopdev //卸载,尝试写入文件永久挂载 [root@cnode6_8 /]# vim /etc/fstab [root@cnode6_8 /]# tail -n1 /etc/fstab //配置文件添加的部分 /testdir/loopdev /mnt/loopdev ext4 loop,defaults 0 0 [root@cnode6_8 /]# mount -a [root@cnode6_8 /]# mount |grep loop //配置文件生效 /testdir/loopdev on /mnt/loopdev type ext4 (rw,loop=/dev/loop0) [root@cnode6_8 /]# losetup -a /dev/loop0: [0803]:11 (/testdir/loopdev)注释:通过losetup查看loop设备与分区的关联情况,也可以手工指定哪一个loop设备关联某一个分区,losetup /dev/loop2 /testdir/partfile就是关联loop2和分区关联。可以写loop设备到目录的挂载,分区其实是关联了一个loop设备,在rhel6中有8个loop设备,在rhel7中是动态建立的
使用mknod创建block或者字符设备其中b是指block,7是loop设备的编号,67是第多少个loop设备,可以先查看一下系统的loop设备编号到多少