磁盘管理
介绍
文件系统
磁盘介绍
磁盘管理
制作文件系统
挂载文件系统
卸载文件系统
设置文件系统
检查文件系统
swap文件系统
磁盘介绍
 1.磁盘的构造
linux系统中的磁盘管理_linux系统中的磁盘管理
磁盘的构造
机械硬盘的基本组成
一般硬盘由若干张盘片组成。磁盘中不管是磁面磁柱磁道还是扇区都有自己的编号,从0开始编号
磁面:每一张磁盘的表面
磁柱:每个盘片上同一编号的磁道组成一个磁柱
磁道:以磁盘中心为圆点以固定长度为半径画圆
扇区:从磁道中切割出来的存储区块,硬盘中最小存储单位,512字节
2.磁盘分类:硬盘、软盘、光盘、磁带、闪存(一般为usb的设备)远离电磁干扰
硬盘:IDE硬盘  ATA接口 识别为/dev/hd(a.b…)
SATA接口 识别/dev/sd(a.b…)

转速有4200/转、5400/转、7200/转

  台式机:3.5寸硬盘

  笔记本:2.5寸硬盘

  超极本:1.8寸硬盘(价格介于2.5寸硬盘与固态硬盘之间)

    SCSI硬盘 识别为/dev/sd(a.b…)    

      一般是在服务器上使用的企业级硬盘,转速有10000/转、15000/转,转速越快,硬盘的读写速度越快,但是相对硬盘的寿命越短。如果硬盘数量超过26块,第26块命名为sdaa,第27块命名为sdab,以此类推 … (另一种控制途径:scsi控制卡专门用来管理硬盘的)

    SSD固态硬盘

          优点:写入速度快,读写速度快(500M/s)、功耗低、抗震、工作产生噪音低

          缺点:性价比低,寿命限制只有3000-5000个PE(按照擦写次数计算)

      制作手段有两种

          一、利用固态存储芯片(类似于U盘)

          二、利用内存条(不适用,断电数据丢失)

      软盘:识别为/dev/fd(0-7)

    移动磁盘 USB
1394 (IEEE1394,数字化家庭使用的物联网接口)
PCMCIA  这三种被统一识别为/dev/sd
注意:linux rescue修复模式下,不管磁盘是什么类型的都被识别为hd的设备
    计算机、服务器是如何将哪块磁盘识别为a、哪块识别为b的呢?
1.由BIOS指定启动顺序
2.由操作系统来判断
一台主机上有两块磁盘,分别插在1口、2口上,两块盘上都有操作系统,启动哪块盘上的系统哪块盘就被识别为a,没启动的那块盘被识别为b。
MBR(master boot record) 
主引导记录 MBR (整个磁盘的0号磁柱 0号磁面的0号扇区是MBR)
IPL initial program loader 
初始化程序加载器 IPL  占用446字节  
用来存储操作系统的相关信息
partition table  
分区表占用64字节
校验用来存放 IPL的检查码 保证64字节数据正确  占用2个字节
MBR备份(备份到U盘)

插上U盘后执行命令

              dd if=/dev/sda of=/dev/sdb  bs=512 count=1  备份    

              dd if=/dev/sdb of=/dev/sda  bs=512 count=1  还原

dd 实现硬盘对克、保存、备份数据等

if infile 从哪读入数据

of outfile 指定数据写入的位置

bs block size 块大小

count=1 表示整条命令执行的结果是 让系统从指定的硬盘上读取一块512字节的数据写到U盘上(正常情况下dd在操作的时候是从硬盘开始的部分读入,按顺序去写,这里指定只读一块也就是MBR)

#dd if=/dev/zero  of=/tmp/abc bs=1M count=100
/* dd if=/dev/zero 永远输出恒为空的数据 */ 
#ll –h /tmp/abc  查看abc属性信息
#-rw-r—r— 1 root root 100M 05-09 11:08 /tmp/abc
#cat /tmp/abc  无内容  
  abc文件夹为空,但占用空间为100M。
文件系统
文件系统决定计算机存取数据的方式(NTFS、EXT3)
不管是什么文件系统,每一个磁盘空间(分区)只能使用同一个文件系统。
不管什么类型的磁盘,都可以建立多个分区。
MBR扇区共有512个字节,其中分区表占用64个字节。每块磁盘可以存储若干条分区信息,每条分区信息代表着磁盘的某一个分区,每条分区信息占用了16个字节,由于分区表为64个字节容量,所以每块磁盘最多只能建立4个主分区或者说能建立3个主分区和一个扩展分。
分区信息记录的内容:
开始磁柱编号:定义这个分区是从第几号磁柱编号开始的
所有磁柱数量:定义这个分区一共占用了多少个磁柱
分区系统标识符:声明这个分区可以创建什么类型的文件系统
分区信息可以存储在MBR扇区,还可以存储在其他位置,主分区和扩展分区是存储在MBR扇区中的,而逻辑分区存储在别的扇区中。
根据分区信息存储的位置可以分为:
主分区分区信息存储在MBR扇区的分区表中
扩展分区特殊类型的主分区,本身的分区信息也是写在分区表中。
特性:只能存储分区信息,不能存储数据
逻辑分区存储在扩展分区当中的分区,每一个逻辑分区可以存储一个文件系统
建立逻辑分区的个数取决于扩展分区的类型和磁盘的类型。
扩展分区的类型 由系统标识符区分
系统标识符id=5   逻辑分区=12个
系统标识符id=85   ide=60  scsi=12
磁盘标识命名顺序
主分区&扩展分区1-4 (eg:/dev/sda1、/dev/sda2…)
逻辑分区 5-63 (eg: /dev/hda10、/dev/sdb16)
eg:
/dev/sda1 第一块硬盘上的主分区
/dev/sdb16 第二块硬盘上第12个逻辑分区
/dev/hda10 第一块硬盘上的第6个逻辑分区
hdparm跟磁盘管理相关的一个命令(使用不好,对硬盘会有伤害,慎用)
查看磁盘信息,调整磁盘参数,目的:对磁盘性能的优化
   #hdparm /dev/sda    查看整块硬盘的信息

          hdparm  -d 0/1  DMA=direct memory access 是否启用磁盘效能

          -B 0-255 设置磁盘的电源管理功能(数值越小,代表硬盘越省电,但效率越低;数值越大越费电,效率越高,但是255表示停用此功能)

          -C   检查ide磁盘的状态

          -g  显示磁盘的结构信息(磁柱、磁面、扇区的数量)

          -S 1-255   (1-240 5s的倍数  241-251 30min的倍数   252 21min  253 8-12h  254 unknone   255  21分15秒)

          -u num  设定中断屏蔽标签(IRQ)

磁盘管理工具

Linux中有三种: fdisk   sfdiskparted

  fdisk 最常用的工具,主要是用来对硬盘进行操作的: (支持2T以上的分区)拥有家友好的交流界面,操作容易上手

  fdisk /dev/sda 硬盘统计信息 出现操作界面 按 m 是进入帮助菜单提示那个按键起到哪个作用

[root@localhost ~]# fdisk /dev/sda                                

The number of cylinders for this disk is set to 2610.          

There is nothing wrong with that, but this is larger than 1024,

and could in certain setups cause problems with:              

1) software that runs at boot time (e.g., old versions of LILO)

2) booting and partitioning software from other Oss

(e.g., DOS FDISK, OS/2 FDISK)                              

Command (m for help): m                                        

Command action                                                

 a   toggle a bootable flag   #切换分区的启动标签

 b   edit bsd disklabel  #编辑bsd系统中的磁盘卷标

 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 # 建立空的sun 分区表

 t   change a partition's system id # 改变一个分区的分区类型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):

  建议分区完成之后要执行命令:partprobe强制内核更新分区表

  fdisk –l 显示硬盘的容量 磁盘驱动器的内部结构以及分区表信息

  如果分区时,在分区起始结束的位置没有刚好在柱面的边界处结束,就会出现一个“+”号。eg: 20860402+

[root@localhost ~]# fdisk -l

Disk /dev/sda: 21.4 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Device   Boot  Start    End     Blocks   Id  System

/dev/sda1   *     1       13     104391   83  Linux

/dev/sda2         14     274    2096482+  82  Linux swap /Solaris

/dev/sda3         275    2610    18763920   83  Linux

  Id 号表示分区类型,十六进制

Linux中常用的id号:
82(Linux swap / So)、83(Linux)、85(Linux extended)
8e(Linux LVM)、fd(Linux raid auto)
Windows常用的id号:
7(HPFS/NTFS)、b(W95 FAT32)、c(W95 FAT32 (LBA)) 
文件系统
block块  1k 2k 4k
作用:不管是什么操作系统,创建文件系统的目的就是把多个扇区组合起来形成块。
建立文件系统时,会在磁盘上建立包含若干个扇区的块,块是用来对数据进行存储的,磁盘的最小存储单位是扇区,假如有10M的数据,以扇区为单位进行存取,这10M的数据会被读取10*1024*1024/512=20480次,这样就严重的影响了磁盘的效率。如果把多个扇区组合起来使用的话就会好很多,因为减少了磁盘的读取次数。
块分为两种:
资料块——用来存放文件内容 
超级块——用来存储资料块信息的
如果块比较大,读取速度比较快IO性能好,但是会造成空间的浪费。(对于大数据来说有一个比较好的性能,块大的话,数据延续的磁头只管读就行了)
如果块小的话会浪费一定的IO,但是会节省空间。
建议:搭建文件服务器时,如果存储的文件不是很大的话,那么磁盘块的大小可以分小些,避免空间的浪费。如果存放的是数据库类型文件(一般为几个G或十几个G)的话,磁盘的块就分的大一些,保证磁盘的IO性能。

inode 索引节点(i节点)  128bit

  作用:用来存储一个文件信息的。

      包含的文件信息有:文件类型、权限、连接数量、所有者信息(包括所有者组) 、大小 、数据块位置、时间(atime ctime mtime)

      每一个索引节点用来存储一个文件的信息,所以每个分区有多少个索引节点就代表可以存储多少个文件。正常情况下,系统提示磁盘空间不足,就是磁盘存储空间不足,但是还有另一种可能,那就是索引节点使用完了,即使磁盘空间还有空间也写不了东西。

dentry 目录项

  作用:将索引节点和数据块关联起来

      当新建一个文件的时候系统会分配给这个文件一个I节点和一个对应大小的块(块容量大小至少容得下文件内容大小);当新建一个文件夹的时候系统会分配给这个文件夹一个I节点和一个块。文件夹只是一个容器,真正存储数据的而是文件,系统分配给文件夹的块是用来存储包含在文件夹下文件的I节点信息的。

      软连接

          优点:可以跨分区,可以链接目录。

          缺点:源文件删除之后,链接文件打不开。创建新的I节点。

      硬链接

          优点:源文件删除后,链接文件照样可以打开。

          缺点:不能跨分区,不能链接目录。与源文件共用I节点。

Linux文件系统的种类

linux专用文件系统:ext2 ext3 ext4 swapfs  
其他平台:msdos vfat ntfs
    系统运行类文件系统:procfs(与系统内存数据相关) devfs(跟系统设备相关) tmpfs(跟系统缓存相关)
网络文件系统:NFS smbfs

ext2 ext3 ext4简单介绍

  ext2  linux系统中标准的文件系统

      特点:较好的文件存取性能,尤其是对中小型文件 IO性能较为突出

      单一文件的大小上限为2048G    

      文件系统(单一分区)的大小上限为16384G

      以前 2.4版本内核的linux系统单一分区大小不会超过2T

  ext3  基于ext2的基础上 加了文件系统的日志的功能

      在ext3文件系统的中,一个8G的分区它的日志只占了3-5k的空间。单一分区文件系统支持                16TB,单一文件的大小上限为2TB  

     支持子目录的个数在32000以内 /a/b/c/……

  ext4  兼容ext3 使用fsck检测磁盘速度比ext3的明显快很多

        日志功能比ext3多了校验的功能

        从2.6.28版本的内核开始正式支持ext4

      在ext3文件系统当中,只需要执行一些命令就可以将文件系统从ext3转换到ext4类型,并且不需要重新格式化也不需要备份数据,原有的数据不但保存完整,而且转换后的文件系统获得了ext4更大的容量和性能上的提升。

默认 inode 大小为 256 bit
单一分区文件系统支持1EB 
单一文件的大小上限为16TB 
对子目录的个数没有限制 
换算规则:1EB=1024PB 1PB=1024TB 1TB=1024GB
制作文件系统
VFS(virtual filesystem) 虚拟文件系统
Linux系统内核采用了虚拟文件系统层的结构,这个文件系统层规定了目录树上的所有东西,包括:文件,目录,设备节点,符号连接(链接),必须由inode(i节点)、block(数据块)、dentry(目录项)组成。
mkfs命令建立 linux 档案系统在特定的 partition 上
#ls /sbin/mkfs.*  查看linux默认支持的文件系统类型
如果要把当前的文件系统格式化成另一个文件系统需要执行如下的一条命令:
   #mkfs.ext2 /dev/sdb1  /* 将当前分区的文件系统格式成ext2的文件系统*/
#mkfs.ext2 /dev/sdb1  /* 将当前分区的文件系统格式成ext2的文件系统*/
mke2fs命令 与mkfs等效(格式化文件系统有其他要求是使用此命令)
mke2fs 默认格式化成ext2的文件系统  mke2fs /dev/sda1
命令参数
mke2fs -b 格式化时指定文件系统大小  1024 2048 4096
           -c 即check,建立文件系统时检查是否有坏损块
           -i/-N  -i指定i节点的密度,-N指定i节点的数量(绝对数目)
           -L  定义文件系统的卷标  eg:mke2fs -L vfast /dev/sdb1

         -m  定义保留区块的大小 默认ext2与ext3会为root用户保留5%的区块(即硬盘5%的存储空间),防止普通用户和其他用户漫无目的的使用硬盘空间导致root用户没有操作空间可用

          eg: mke2fs -m 1 /dev/sdb1  将为root保留的默认空间改为1%

           -j 格式化成ext3的文件系统
dumpe2fs  查看一个分区文件系统信息以及这个分区上超级块的信息
实例:creat a new disk之后,对其进行分区,次硬盘的标识为/dev/sdb
      #fdisk /dev/sdb 
      … 创建分区/dev/sdb1 记得按w保存退出
      #fdisk –l
      #partprobe 强制激活分区
      #fdisk –l 
      #mkfs.ext3 –L vfast /dev/sdb1 制作ext3文件系统
 #dumpe2fs /dev/sdb1  查看sdb1分区文件系统信息
如果要使用这个分区就要挂载
挂载的目的就是要使用新生成的这个新的文件系统或者是光驱
      #mount /dev/sdb1 /mnt/  将新建的分区挂载到/mnt下
 #cd /mnt   切换到/mnt目录下 就可以对这个分区进行操作
挂载文件系统mount
简单介绍mount命令
常用的命令参数
mount  -t  指定文件系统类型
           -o  即other,添加附加选项
如果只执行mount这个命令,后面什么都不加,会显示当前系统中的哪个文件系统挂载到什么地方,文件系统类型,已经可执行的权限。执行mount这条命命令相当于执行cat /etc/mtab,/etc/mtab就是挂载表,一些外置存储设备的更新添加删除都会造成这个文件内容相应的变动。
当我们在执行mount挂载存储设备的时候,不需要指定文件系统,因为他会自动匹配/etc/filesystems这个文件里所指定的文件系统类型。如果系统不认得话,就需要使用-t这个命令参数来指定一下即可(前提是你的系统内核必须支持你所指定的文件系统类型,否则还是挂不上)
mount 挂载 显示权限
注意:加*号的,为默认值

rw*读写

ro 只读

sync   数据同步处理 写到内存的同时写入磁盘 小数据使用

async* 数据异步处理 先写到内存,在写到磁盘 大数据使用

atime* 指定是否维护所挂载的设备的访问时间,默认使用atime维护的

noatime 如果是笔记本或经常移动的设备可以使用noatime 不维护访问时间,避免对硬盘的连续读写和运转,延长硬盘的使用寿命

dev*   指定文件系统内的文件如果有设备文件的话,是否把它解释成设备文件,默认解释成设备文件的

nodev   不解释成设备文件

exec*   指定文件系统内如果有可执行文件的话是否被识别为可执行的,默认被识别为可执行的

noexec  不被识别为可执行的

suid*  指定被挂载的文件系统当中,如果有文件被设置为suid,被挂载后是否还生效

nosuid  suid不生效

user  nouser 是否允许普通用户执行mount这个命令挂载文件系统,一般不在mount命令加这个参数,是在fstab这个文件里写的,fstab所设计到时权限与mount是一样的 
/etc/fstab这个文件决定了系统中把哪个设备挂载到哪个挂载点下
 eg: #mount /dev/sdb1 /mnt/ 将/dev/sdb1设备挂载到/mnt/挂载点下,rw
     #mount -o remount,ro /dev/sdb1重新挂载赋予只读的权限,ro
打开/etc/fstab这个文件
  #cat /etc/fstab
里面的defaults代表的就是默认权限
defaults=rw+suid+dev+exec+auto+nouser+async
  auto 自动挂载 
卸载文件系统umount
命令参数
umount  -a   all 卸载所有文件系统
        -r   如果卸载失败将权限修改为ro
        -v   显示详细信息
        -t   指定文件系统类型
        -f   强制
fsck 检查文件系统
命令参数
fsck  -A  根据/etc/fstab文件设置检查所有文件系统
      -a  即auto自动修复文件系统
      -y  代替回答yes
      -f  强制
注意:不要对已经挂载的文件系统进行fsck这条命令,因为fsck在检查的时候可能会涉及到对硬盘上数据的更改,因为系统会对已经挂载的分区进行读写,fsck也进行对其读写就会造成冲突,就会到时数据损坏。所以要进行fsck是要将对应的分区卸载,然后再进行fsck检查。
  eg:#umount /mnt
     #fsck /dev/sdb1 –y
如果在进行检查文件系统是没有进行卸载相应的分区,导致根分区出问题怎么办?
在急救模式下也有fsck这条命令.
free查看系统内存信息
[root@localhost ~]# free                                                   

       total       used       free     shared    buffers    cached                    

Mem:   1034708     407420     627288       0        32684     259076            

-/+ buffers/cache: 115660     919048                                  

Swap:  2096472          0    2096472                                    

[root@localhost ~]#
free -m  表示以M的单位显示内存信息(推荐使用-m)
[root@localhost ~]# free -m                                                    

      total       used       free     shared    buffers     cached        

Mem:    1010        435        575          0         50        259        

-/+ buffers/cache:  124        885                                          

Swap:   2047          0       2047                                          

You have new mail in /var/spool/mail/root                            

[root@localhost ~]#

free -g  表示以G的单位显示内存信息(小数点后面的数全抹掉)                                


扩充swap分区有两种方法

 1:生成个swap文件
#dd if=/dev/zero of=/tmp/swapfile bs=1M count=1024 
#ll –h /tmp/swapfile 
-rw-r--r-- 1 root root 2.0G May 12 04:25 /tmp/swapfile
# mkswap /tmp/swapfile  制作swap文件系统
Setting up swapspace version 1, size = 2147479 kB
# swapon /tmp/swapfile  开启这个制作的虚拟内存功能
#free -m 查看结果(在原来的虚拟内存大小基础上加上1024M扩充的虚拟内存)
#swapon -s  查看系统中swap分区的优先级
加上虚拟内存之后,可以使用swapon -s 来查看操作系统中使用swap文件系统的优先级(-5至+10),数值越大优先级越高,会越早使用。
注意:使用分区制作的虚拟内存要比使用文件制作的虚拟内存要快。
#swapon -p 1 /dev/sdb1调整这个swap分区的优先级为1
关闭swap
 #swapoff /tmp/swapfile 关闭以文件制作的虚拟内存 
2:在建立系统时创建一个swap分区
也就是在安装系统时手动创建一个swap分区。