磁盘篇
一、理论知识:
1、硬盘的结构:通俗的想象硬盘,是由多个同轴的双面磁盘组成,在磁面上有磁头,信息的读取就是由磁头完成,每个磁盘上面又有多个同心圆的磁道,这就构成了硬盘。在此基础上我们人为的进行了一些划分,如扇区、柱面。扇区就是在同一磁面上的扇形,划分扇区是因为以磁道为最小存储单元不方便磁头的寻址;柱面是同轴的磁面在同一半径上的磁道,划分柱面也是为了磁头寻址方便。硬件在linux中都有对应的文件映射,映射文件都在/dev/*中,其中硬盘的接口有IDE,SATA等形式,其中IDE形式的在linux中文件形式是/dev/hd*,其他的都统一为/dev/sd*。
2、分区的特性:分区的划分是以柱面为单位,现在的分区体系有MBR和GPT两种,主流的是MBR,但是当硬盘大小超过2T时MBR就不在适用。MBR的分区体系是在第一个磁面的第一个扇区存储bootloader、分区信息,此扇区的总大小是512字节,bootloader占了446个字节,其余的又有两个字节用于存储标志位5A,剩下的64个字节每16个字节存储一个分区的信息,因此一共储存4个分区的信息。但我们想多划分分区时就需要拿出一个分区用于再储存分区信息,这个分区就是扩展分区,因此MBR分区体系只能有4个主分区,或者是1个扩展分区划分成多个逻辑分区和多个主分区。每个分区又被划分成多个小的块,多个块又被统一在一个块组中,为为了存储块组信息,又需要有某些块存这些信息,这些块就叫做超级块。每个块只能属于一个文件,一个文件可能被多个块储存,为了方便找到某个文件,又给每个块设置编号,编号存在inode中。上面的bootloader在引导内核程序加载后,内核程序会将'/'与硬盘上相应的区域关联,与系统启动相关的配置均在此,因此/lib,/lib64,/etc不能单独分区。在系统启动完成后,其他文件都是以'/'为入口。
3、内存与swap:内存是cpu与硬盘速度不一致而产生的中间储存设备,用于提高cpu的效率。swap是linux中的虚拟内存,是将一块硬盘格式化和内存一样的文件格式,用于当内存不够用时充但内存使用。实际当中不用到swap是最好的,实际当中分配swap大小的策略是 <2G分配2*内存,2G-4G分配4G,>8G分配4G,对于数据库服务器最好不用swap。
二、常用建立命令:
1、建立分区:分区命令有fdisk、sfdisk、parted,其中常用的是fdisk。fdisk是一个交互式的命令,当我们输入fdisk /dev/sdb时会让我们选择是主分区还是扩展分区,分区标示号,起始柱面和结束柱面。其中常用选项有:
fdisk /dev/sdb
p列出分区 l显示分区id n新建分区 t调整分区id d删除分区 q不保存退出 w保存退出
w保存退出之后分区并没有被内核识别还需要用kpartx和partx让内核识别刚才的分区,具体的使用是kpartx -l /dev/sdb列出可以被内核识别的分区,kpartx -af /dev/sdb partx -a /dev/sdb让内核识别上诉的分区。但是在新的盘上执行完w后,内核直接就是别了上诉的分区。
2、构建文件系统:上诉分区完后并不能被我们所用,还需要格式化建立文件系统。命令有mkfs、mke2fs,其中mke2fs是常用的。其中常用的选项有:
mke2fs /dev/sdb
-t制定文件系统类型 -L指定卷标 -b制定block大小 -m 预留给管理员空间百分比 -i多少个字节分配一个inode -I每个inode的大小 -N分配的inode数
3、构建swap:mkswap /dev/sdb,在执行上诉命令后并不会将swap加到内存的大小上,还需要手动的开启,用swapon /dev/sdb,如果想要关闭可用swapoff /dev/sdb。
三、常用查看命令:
1、对应文件:
a、硬盘:电脑上的硬盘设备在linux上以文件的形式表现在/dev/[hs]d*上
b、分区:分区的文件是/proc/partitions
c、内存:/proc/meminfo ,和/proc/sys/vm/swappiness(什么时候使用swap,默认为60)
2、查看命令:
a、硬盘:fdisk -l可以查看硬盘的分区情况,hdparm也可以查看硬盘的信息[-i通过操作系统查看 -I直接绕过操作系统查看硬盘 -g硬盘布局信息]
b、分区:blkid 查看分区的uuid和type,dumpe2fs用来查看分区的块组信息[-h只查看超级块],tune2fs[-l查看超级块信息,-L改变卷标,-m调整预留给管理员的百分比,-o设定默认挂在选项,-O调整分区特性],e2label可以查看和更改卷标,df[-h查看数据区的使用 -i查看原数据区的使用] du[-s查看目录实际占用的空间大小]。
c、内存:free查看内存使用[-mI以MB显示大小-g以GB显示大小-h以方便读形式显示]
四、挂载才能真正的使用:
1、为什么要挂载:为什么要挂载,是因为内核只认识‘/’,所有其他文件的寻找都需要从‘/’开始。只有把新加的设备与‘/’建立了联系,才能找到这个设备,这就是挂载。
2、怎样挂载:mount [options] -o[挂载选项] 设备 挂载点
3、开机自动挂载:实现开机挂载是由系统脚本/etc/rc.d/sc.sysinit中执行的。在这个脚本中会挂载/etc/fstab中定义的文件系统挂载表。/etc/fstab文件的格式是
挂载设备 挂载点 文件系统类型 挂载选项 转存频率 自检频率
4、怎样查看挂载情况:直接mount命令、查看/etc/mtab、查看/proc/mounts
五、硬盘层次的删除、复制、移动:
要想搞清楚硬盘层次的删除、复制、移动首先需要明白系统是怎样找到一个文件的,这里以/etc/rc.d/sc.sysinit为例说明。一切的开始都是从'/'开始的,在根文件列表中找到与/etc对应的inode,根据inode找到对应的block块就是/etc所在磁盘空间,在/etc中找到与rc.d对应的inode,在根据此inode找到rc.d的磁盘空间,再在rc.d中找到与sc.sysinit对应的inode,根据此inode就找到了sc.sysinit对应的磁盘空间了。明白了这一点就能很简单的想明白所谓的磁盘空间操作。首先说删除,如果这里要删除sc.sysinit,就只需要在rc.d中删除sc.sysinit对应的inode,这样就无法找到sc.sysinit文件了;复制比较麻烦,需要先安排好block块,再写入对应的inode,最后就是将原文件的内容复制到新的block块;对于移动,要看操作是否在同一个分区,如果在同一个分区就比较简单,比如要移动sc.sysinit到/etc/new中,只需要在new文件中建立inode到sc.sysinit的关系,再在rc.d中删除inode到sc.sysinit的关系,但对于不同分区就只能按照复制来实行了,这就是为什么在同一块分区移动比较快的原因,而跨分区就比较慢了。
dd命令就是实现在硬盘上的复制功能,dd if=src of=des bs=#[b|k|m|g] count=#
六、硬连接与符号连接:
目的:目的很简单,就是为了用多个路径访问同一文件。
原理:硬连接是不同文件指向同一inode,例如/etc/rc.d,想要给他创建硬连接/etc/link,就是将link对应的inode与rc.d对应的inode相同,因此硬连接只能在同一分区中,但要是想在不同分区中实现就只能用符号连接了。符号连接是存储原文件的路径字符串在inode中,例如要为/etc/rc.d创建符号连接/etc/slink,就是在与slink对应的inode中存下“/etc/rc.d”这个路径,寻找的过程是先在根下找到与etc对应的inode从而找到/etc,再在/etc中找到slink对应的inode,在此inode中存有路径字符串/etc/rc.d,然后安相同的办法根据此字符串找到rc.d文件。
实现:ln src link实现硬连接,ln -s src link实现符号连接。
七、Raid技术:
作用:raid技术就是将多块磁盘用一个控制器连接,再由此控制器与主板连接,因此对于系统来说,多块磁盘就是一块。这样做的作用是提高磁盘的读写性能和磁盘的容错能力。
raid常用级别:常用的raid级别有raid0,raid1,raid5,raid10,raid50。raid0是将数据分成多块分开存储在这多块磁盘上,因此提高了读写性能,但是只要有一块磁盘损坏整个数据就无法正常使用,因此它没有容错能力,raid0至少需要两块盘,磁盘的利用率是100%;raid1是将一块磁盘 用作存数据另一块盘作为镜像使用,这样对于写性能没有提高,但是因为两块盘同时可以提供读,因此提高了读性能,并且当一块盘坏了时另一块盘还可继续工作,因此提高了容错能力,raid1至少需要两块盘,利用率只有50%;raid5是在raid4的基础上改进的,它至少需要三块盘,其中两块盘存数据,第三块盘存前两块盘数据的校验码,并且是这三块盘交替存储校验码,对于raid5读写性能和容错能力都有提升。raid10就是将raid1和raid0组合使用,raid50也是如此。
软raid实现:实现软raid,可用mdadm命令。mdadm [model] <raidevice> [option] <component-device>。其中model是模式,常用的模式有创建模式-C,装配模式-A,监控模式-F;raidevice是创建完raid后的设备文件,一般为dev/md*;<option>是对应模式的选项;component-device是用于创建raid的磁盘。
查看:用mdadm -D raidevice可以查看创建的raid信息,也可以在/proc/mdstat中查看。
八、LVM:为了实现在线扩展以及快照功能,,将存储空间抽象成逻辑空间作存储设备使用。LVM的实现分物理卷、卷组以及逻辑卷。
构建:构建LVM需要分三步完成,首先需要构建物理卷,进而由物理卷建卷组,再在卷组的基础上构建逻辑卷。下面就说说这三组命令中比较常用的。
物理卷管理命令:物理卷管理命令都以pv开头,主要的有pvcreate、pvs、pvdisplay、pvscan、pvmove、pvremove
卷组管理命令:都以vg开头,包括vgcreate、vgs、vgdisplay、vgextend、vgreduce、vgremove
逻辑卷管理命令:都以lv开头,包括lvcreate、lvs、lvdisplay、lvextend、lvreduce、lvremove
扩容:扩容需要两步,首先扩展物理边界(空间大小),再扩展逻辑边界(文件系统)。扩展物理边界用lvextend命令,扩展文件系统用resize2fs命令。但是在具体中使用时需要注意在使用lvextend命令时需要先用vgs看一下组中有没有可以使用的剩余空间,在扩展完空间后需使用df -h命令查看是否扩展成功。
减容:减容比扩容稍微麻烦些,首先需要卸载逻辑卷,用命令unmount,还要强制执行e2fsck -f强制执行检查,最后才是减少逻辑边界(lresize2fs)再减少物理边界(lvreduce)。
快照:快照中存储的是逻辑卷中即将发生改变的数据,快照卷也是逻辑卷,但不要求与逻辑卷大小保持一致,从快照卷中访问的是没发生该变迁的数据,从原逻辑卷中访问的是发生改变的数据。快照卷的大小取决于原卷中数据发生改变的幅度。创建快照卷用命令lvcreate -s -p r -n name -L size 原卷。