磁盘管理

磁盘管理

磁盘结构

一块硬盘由若干张磁盘构成,每张磁盘的表面涂有一层磁粉,磁盘会提供一个或多个读写磁头,磁盘通过读写磁头来

改变磁盘上磁性物质的方向,由此存储计算机中的0或1数据。

一个磁盘有以下组件组成:

1.磁面:每一张磁盘的表面,称为磁面;

2.磁道:每一个磁面的空间,会逻辑地切割出许多磁道

3.扇区:每个磁道可以再切割出若干个扇区,扇区是磁盘的最小单位,默认512B

4.磁柱:每个磁盘上同一个编号的磁道组成一个磁柱。

如果把每个扇区依照其编号顺序排列起来,就可以变成一个线性的磁盘空间。

磁盘种类

 IDE (ATA)  :133Mbps  并行 ,1个控制器,可以连2个数据盘。一主一从

 SATA:6Gbps  串行, 1个控制器上只能连1个数据盘

 USB:串行

 SCSI:UltraSCSI 320Mbps 并行

 SAS:串行 2.5英寸,较SCSI体积小,转速块,造价高,磁盘空间小

SAS或SCSI:1根总线可以节多个盘

     SCSI 8:1个SCSI适配器(Iitiator),7个target,每个target可以接多个盘(每个盘都有一个

LCN:逻辑控制单元,数据首部填写LCN,这样CPU就是知道将数据存到哪个target的哪个盘)

   SCSI 16:1个SCSI适配器,15个target

备注:在主板中集成的成为控制器,可插拔的叫做适配器。如:网卡适配器。

主引导记录(MBR)

1.整个磁盘的第0柱的第0磁面的第0个扇区,就是MBR

2.MBR存储以下信息:

   1.BootLoad程序(初始化程序加载器):占用446B,用来存储OS的内核

   2.分区数据表:占用64B,存储分区信息(记录硬盘上有多少分区,每个分区大小,给哪个OS使用等信息)

   3.验证码:占2B,存储BootLoad的检查码(Checksum)

计算机启动时,会加载前446B,这是由OS来执行。当计算机无法读取MBR,则计算机将无法启动OS

 备份还原MBR:dd命令

dd命令:转换并复制一个文件,复制的为底层的数据流(常用于硬件性能测试)

if = 数据来源input file

of=数据存储目标output file

bs=    默认单位为B

count=     个数

seek=     创建数据文件时,跳过的空间大小

eg:

    dd if=/etc/inittab of=/root/inittab

    dd if=/dev/sda of=/mnt/usb/mbr.backup bs=512 count=1    #备份MBR至USB

    dd if=/mnt/usb/mbr.backup of=/dev/sda bs=512 count=1   #还原MBR至硬盘

    dd if=/dev/zero of=/var/swapfile bs=1M count=1024   #制作虚拟镜像文件

    cat /dev/cdrom > /root/rhel5.iso 制作磁盘镜像

设备文件名

IDE硬盘:

hda: 第1个IDE硬盘
      hda1:第一个主分区 (主分区最多只能有4个)
      hda2:第二个主分区/扩展分区(扩展分区只能有1个)
      hda3: 第三个主分区/扩展分区
      hda4: 第四个主分区/扩展分区
      hda5: 第一个逻辑分区 (逻辑分区可以有多个,从5开始)
      hda6: 第二个逻辑分区

hdb:第2个IDE硬盘

SATA、SCSI硬盘:

sda:第1个SATA或SCSI硬盘

sdb:第2个SATA或SCSI硬盘

fdisk -l   #查看当前系统识别了几块硬盘

创建设备文件 mknod

mknod [OPTION]... NAME TYPE [MAJOR MINOR]

     -m MODE

 eg:

      mknod -m 640 mydev c 66 1    #创建mydev文件,类型为字符设备文件,权限640,主设备号66,次设备号1

     echo "hello"  >> /dev/pst/0   #向远程登陆终端0,发送hello消息

     echo "hello" >> /dev/sda 会覆盖MBR

查看/设置磁盘

hdparm [option...] DEVICE...

   -d NUM   #获取或设置是否启用磁盘DMA,NUM=1表示启用,NUM=0表示停用

   -B NUM   # 设置高级电源管理(APM)功能,NUM=0~255,越小越省电但效率越差,255表示停用APM功能

   -C    #检查IDE磁盘的状态:

               unknown:未知

       active/idle:状态正常

     standby:待命模式

    sleeping:睡眠模式

  -g     #显示磁盘的结果信息,例如:磁柱、磁面、扇区数量

  -S NUM  # 进入待命模式的时间,NUM的值:1~240:5s的倍数 ;241~251:(NUM-240)*30分钟

  -u  NUM  #获取或设置中断屏蔽标签的数值

  -v    #显示所有的磁盘参数

#hdparm /dev/sda | grep 'dma'     #检查dma状态

监控磁盘空间

df      查看已挂载磁盘的使用情况

   -h    #按人类可读的形式显示

   -i     #显示inode使用情况

   -P   #不换行显示

   -T  #显示文件系统类型

# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 3.8G 1.7G 2.0G 46% /
/dev/sda3 15G 167M 14G 2% /home
/dev/sda1 46M 11M 33M 24% /boot
tmpfs 252M 0 252M 0% /dev/shm

字段说明:

   Filesystem:设备文件

   Size:大小

   Used:已使用

   Available:可用

   Use%:使用率

  Mounted on:挂载点

du   #显示某个特定目录的磁盘空间,默认当前目录

  -h   #人类可读模式显示

  -c   #显示所有目录下所有文件大小及总大小

  -s   #显示整个目录的文件大小

#du -h

8.0K ./.gnome2_private
8.0K ./.eggcups

。。。

压缩数据

压缩工具    文件扩展名   描述

bzip2     .bz2

compress   .z

gzip            .gz

zip              .zip

xz               .xz

bzip2 工具

1.bzip2  压缩文件

   -d   解压缩,等同于bunzip2

   -k  压缩时,保留原文件

   -Num  指定压缩比,默认为6,取值范围1~9

2.bzcat 查看压缩文件的内容

3.bunzip2 解压.bz2文件

4.bzip2recover 

eg:

#bzip2 aa.txt    压缩成aa.txt.bz2

#bzcat aa.txt.bz2   查看.bz2内容

#bunzip2  aa.txt.bz2   解压.bz2文件

gzip工具

linux最流行,用来替代compress工具。

1.gzip   压缩文件

   -d   解压文件

   -Num   指定压缩比,默认为6,取值范围1~9

2.zcat   查看压缩文件内容

3.gunzip  解压文件,解压文件会删除原文件

zip工具

优点:能够将整个目录下的文件都压缩进单个文件,即归档又压缩

缺点:压缩比不大

1.zip   创建1个压缩文件,包含指定的文件和目录

2.zipcloat 创建1个加密的压缩文件,包含指定的文件和目录

3.zipnote 从zip文件中提取批注

4.zipsplit  将一个现有zip文件分割成多个更小的固定大小的文件

5.unzip  从zip文件提取文件和目录

#zip -r testzip  test   #递归将目录test压缩进testzip文件

xz工具

比bz2压缩比小

xz 

     -d   解压缩

     -Num   指定压缩比,默认6,取值范围:1~9

     -k   压缩时保留原文件

xzdec   解压缩

   -k     保留原文件

归档数据

压缩工具大多只能压缩单个文件,不是归档工具。目前广泛使用的归档工具时tar

tar function [options] object1 object2

function

    -A    将已有tar归档文件追加到另一个已有tar归档文件

    -c     创建新归档文件

    -t       列出已有tar归档文件的内容

   -r      追加文件到已又tar文件末尾

   -x      从已有tar归档文件提取文件

options

    -C dir    #指定解压路径

    -f  file    #输出结果到文件

    -j          #输出重定向给bzip2命令来压缩/解压打包内容

    -z        #输出重定向给gzip命令来压缩/解压打包内容

    -v       #打印原文件

#mkdir  ./pack/{a,b}.txt
1.打包、查看、解包
#tar -cvf pack.tar pack #打包

  pack/
  pack/a.txt/
  pack/b.txt/

 #tar -tf pack.tar  #查看

  pack/
  pack/a.txt/
  pack/b.txt/

#tar -xvf pack.tar #解包

2.打包再用bzip2压缩,查看,解压缩包

#tar -cjf pack.tar.bz2 pack  #打包并用bzip2工具压缩

#tar -tf pack.tar.bz2

  pack/
  pack/a.txt/
  pack/b.txt/

#tar -xjf pack.tar.bz2   #用bzip2工具解压缩后,再解包

3.打包再用gzip压缩,查看,解压缩包

#tar -czf pack.tar.gz pack  

#tar -tf pack.tar.gz

#tar -xzf pack.tar.gz -C  /root/    #指定解压路径

分区

一个硬盘,需要经过分区--->制作文件系统----->挂载 三步之后才能使用

每个分区信息占用16B,记录以下信息:

  1.分区开始磁柱;

  2.磁柱数量:

  3.分区系统标识符:即分区上的文件结构或者OS的标识符

主要分区:

      分区信息存储在MBR中,故MBR只能存储4个主要分区

扩展分区:

      一个硬盘要划分多于4个分区时,需要用到扩展分区,然后在扩展分区中建里多个逻辑分区。

      扩展分区信息存在于MBR中,只能存储分区信息,不能存放文件数据

逻辑分区:

     存储在扩展分区中的分区,每个逻辑分区都可以存储一个文件系统。

     不同种类的扩展分区,可以建立的逻辑分区数量不一样:

      1.系统标识符=5(Extended)的扩展分区:最大12个

      2.系统标识符=85(linux Extended)的扩展分区:

             1.IDE硬盘:最多60个

             2.SCSI硬盘:最多12个

主要/扩展分区:使用1-4

逻辑分区:使用5-63

 创建分区

 创建分区,以容纳文件系统。

分区管理工具:fdisk  最多创建15个分区

fdisk是一个交互式的分区管理工具,输入fdisk命令后,可使用以下交互式命令

#fdisk  设备文件名称

    l   显示系统支持的分区类型

    p  显示分区信息(包括未保存的改动)

   d   删除一个分区

   n   建立一个新分区

         n----->e:建立扩展分区

         n----->p:建立主分区

  t    修改分区类型(系统ID)

  q    退出不保存

  w    保存退出

  m   显示帮助信息

1、查看分区:fdisk -l  或 #fdisk后,输入p

#fdisk /dev/sda
。。。。省略
Command (m for help): p     #输入p命令
Disk /dev/sda: 21.4 GB, 21474836480 bytes  #大小:214G
255 heads, 63 sectors/track, 2610 cylinders  #255个磁面,每个磁道63个扇区,2610个磁柱
Units = cylinders of 16065 * 512 = 8225280 bytes #磁柱大小,即unit= 1个磁道(63*512)*255磁面

 Device Boot Start End Blocks Id System
/dev/sda1 * 1 6 48163+ 83 Linux
/dev/sda2 7 515 4088542+ 83 Linux
/dev/sda3 516 2480 15783862+ 83 Linux
/dev/sda4 2481 2610 1044225 5 Extended
/dev/sda5 2481 2610 1044193+ 82 Linux swap / Solaris

Device:分区的设备文件名
Boot:是否为启动分区(引导分区),一个硬盘只有一个。
Start:分区起始磁柱
End:分区结束磁柱
Blocks:分区的大小,单位是块,1块=1KB
ID:分区的类型编号
System:使用这个分区的操作系统名称

2、添加分区

举例:
#fdisk /dev/sdb
Command (m for help):n #第1步:输入n

Command action
e extended
p primary partition (1-4)
p                          #第2步设置分区类型:输入p表示创建主分区

Partition number (1-4):1   #第3步设置分区编号

First cylinder (1-1044, default 1):    #第4步设置起始磁柱,按回车或1,表示按顺序排

Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1044, default 1044): +100M  #第5步设置分区大小

Device Boot Start End Blocks Id System
/dev/sdb1 1 13 104391 83 Linux

Command (m for help): p    #第6步,查看分区

Command (m for help): w    #第7步,保存退出

备注:第5步,也可以指定+size 设置size个磁柱,+sizeK 设置size KB 

2、删除分区

删除分区
#fdisk /dev/sdb
Command (m for help): p  #1.查看
Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1          13      104391   83  Linux

Command (m for help): d  #2.删除分区
Selected partition 1  #3.提示,由于只有一个分区,所以自动跳过。
Command (m for help): p  #4.查看是否删除
Command (m for help): w  #5.保存退出

3、修改分区系统标识符

   分区系统标识符是一个16进制的数值,用来记录分区用途的信息,例如:分区存储的是哪一种文件系统

常见分区系统标识符  

标识符     名称                                说明

7            NTFS                   

82         Linux swap/Solaris              swap分区

83           linux                                   ext2和ext3

8e         linux LVM         linux逻辑卷使用的分区

#fdisk /dev/sdb

Command (m for help): l #查看支持的分区类型
。。。。
Command (m for help): p #查看分区
。。。
Command (m for help): t #修改分区系统标识符
Hex code (type L to list codes): 82 #修改为swap分区
Command (m for help): w #保存

3、更新分区数据表

添加、修改、删除分区并且存储时,如果提示以下信息,表示操作的是启动磁盘,需重启系统后生效

WARNING:Re-reading the partiion table failed
with error 16:

使立即生效的办法:partprobe命令。

原理:让内核重读设备分区表

#partprobo [DEVICE]

#cat /proc/partitions   #查看内核识别的设备分区表

文件系统

1.文件系统简介

 文件系统主要用来存储文件的数据

文件由OS通过文件系统来决定哪些扇区用来存放文件的信息(权限、拥有者等信息),哪些扇区用来存放文件的内容

为了快速调用文件的信息,将磁盘空间规划下列几项组件:

  1.块:主要用来存放文件的内容,细分为:

       数据块:存放文件的内容

       超级块:存放数据块的信息,如:各个块是空的还是有内容

   块大小是固定的,若文件大小不能整除块大小,则增加1块。所以,块大执行效率高,浪费空间。块小执行效率底,节约空间。

2.索引节点

  存储文件的信息,信息包括:

     1)文件类型

     2)权限

     3)链接数量

     4)拥有者信息

     5)拥有组信息

     6)文件大小

     7)数据块位置

文件系统能存储的文件个数,由索引节点数来决定。

linux常见的文件系统

 1)linux专用文件系统:ext、ext2、ext3、swapfs、reiserfs等

 2)支持其他平台的文件系统:msdos、vfat、ntfs、udf

 3)系统运行类的文件系统:procfs、devfs、tmpfs

 4)网络文件系统:NTFS、smbfs、AFS、NFS,默认不支持NTFS,若要支持NTFS,需自行编译内核。

ext2:扩展文件系统第2版

  最大文件大小增加道2T

       ext2系统容易在系统断电或系统崩溃时损坏

ext3:扩展文件系统第3版

  具有日志功能,解决了ext2断电问题

  缺点:无法恢复误删的文件,不支持加密文件

ext4:

  支持数据压缩和加密,支持块预分配。      

2.制作文件系统

注意事项:

     1.制作文件系统,会使原文件系统中的文件全部消失;

     2.制作文件系统有别于格式化:linux的格式化只是清空磁盘数据,并不会制作文件系统

     3.建立文件系统只是在磁盘空间上建立数据块和索引节点

     4.准备工作:磁盘空间、决定制作哪种文件系统

制作文件系统:mkfs

mkfs [-t FSTYPE] [DEVICE] [BLOCKS]

     -t  FSTYPE: 指定文件系统类型,默认ext2

     DEVICE   磁盘设备名称

    BLOCKS  要在这个文件系统上建立多少个数据块,不能超过磁盘空间的大小,不指定,默认使用所有

#mkfs /dev/sdb1  

tune2fs

   -L LABEL 修改卷标

   -U UUID

   -c Num  指定挂载次数达到Num后进行自检

mke2fs  #专门管理ext系列文件

   -j   #创建ext3文件系统

   -b  #指定块大小,默认4096,可取值1024、2048、4096

   -L LABLE  指定分区卷标

        #mke2fs -L homedata /dev/sdb1

  -m  #指定预留给root的块数百分比

  -i   #指定为多少字节的空间创建1个inode,默认8192,值为2^n倍

 -N  #指定inode个数

 -F #强制创建文件

blkid  

作用:查看磁盘设备的属性

显示字段解释: 

     UUID:统一的全局表示符

      TYPE:文件系统类型

   SEC_TYPE:文件完全类型

      LABEL:卷标

#blkid /dev/sdb1

e2label

作用:用于查看或定义卷标

#e2label /dev/sdb1  #查看卷标

#e2lable /dev/sdb1  Mydata  #设置卷标为Mydata

3.挂载/卸载文件系统

制作文件系统后,需要挂载,方可使用。

挂载的好处:

  1.用户只需知道文件所在目录,不比关心在哪个设备上。

  2.便于灾难恢复,硬盘出现故障时,只需更换硬盘,挂载在相同位置。然后还原数据即可。

挂载点要求:

     1.挂载点没有被其他进程使用

     2.挂载点需事先存在

mount

用法:mount [选项] [-o [选项]]  [DEVICE] [MOUNT_POINTER]

   -a    挂载/etc/fstab文件中所有未挂载的文件系统

   -t     指定文件系统

   -o   指定挂载属性

         async/sync   读取方式是同步,还是异步。异步的I/O效率较高

         auto/noauto  定义在执行mount -a命令时,是否自动挂载。

         exec/noexec  在读取文件系统上的执行文件时,是否允许被执行

         atime/noactime  文件被异动时,是否更新其访问时间戳。

         dev/nodev   是否启用设备节点文件,dev表示启用,nodev表示不启用

         suid/nosuid  是否启用特殊权限的功能

         user/nouser  是否允许普通用户执行mount命令

         rw/ro            挂载权限

         remount      重新挂载当前文件系统

    默认挂载属性:rw+suid+dev+exec+auto+nouser+async+atime

DEVICE  :可以是设备文件、卷标:LABEL=“”、UUID:UUID=“”

eg:

#mount -t iso9660 -o loop tt.iso mnt  #将.iso文件当作真实CD来挂载,

    -o loop:挂载一个文件

linux访问windows共享文件:

#smbclient -L //192.168.4.48 -U 用户名   #查看windows所有共享文件夹

#mount -t cifs -o  username=用户名,password=密码,iocharse=utf8,codepage=cp936 //192.168.4.48/tmp  /home/tmp

1)查看挂载数据表:

mount命令,实际查看的是/etc/mtab文件。挂载时,自动往/etc/mtab写记录。取消挂载时,从/etc/mtab文件删除记录。

2)挂载:

mount命令只是临时挂载,重启失效。如果想重启后,自动挂载,需要写入/etc/fstab文件

#mkdir /mnt
#mount -t ext3 -o ro /dev/sdb1 /root/mnt
#mount     查看挂载
/dev/sdb1 on /root/mnt type ext3 (ro)
#mount -o  remount,rw /dev/sdb1 /root/mnt  #修改挂载属性
#mount
/dev/sdb1 on /root/mnt type ext2 (rw)

备注:

      挂载将遮住挂载点原来的文件,卸载后,挂载点下原来的文件才会显示出来。

      CD-ROM存储介质,挂载状态时,不能弹出光驱。必须卸载后才能弹出光驱。

3)卸载

   umount [-a]  [-rv] [t FSTYPE] 或umount [-rv] [DEVICE] [MOUNT_POINTER]

      -a   卸载所有文件系统

      -r    卸载失败,尝试修改其挂载参数为ro

      -v   显示卸载进度

      -t   FSTYPE     指定要卸载的文件系统类型

          iso9660:标准cd-rom文件系统

     DEVICE    设备文件名称

     MOUNT_POINTER  挂载点

查询哪些进程在使用某一个文件系统

#fuser -vm DEVICE | MOUNT_POINTER

结束使用某一个文件系统的进程  

#fuser -km [--SIGNAL]  DEVICE | MOUNT_POINTER     #默认向占用文件系统的进程发送SIGKILL信号

3.设置文件系统

 /etc/fstab  文件系统数据表,开机自动加载。

/etc/fstab的功能:

   1.开机自动挂载

   2.定义每一个文件系统的信息

   3.简化mount/umount命令的操作

   4.定义某一个文件系统的挂载参数

   5.设置备份的频率

   6.配置开机时是否要检查文件系统

#cat /etc/fstab

LABEL=/           /         ext3       defaults 1 1
LABEL=/home      /home      ext3       defaults 1 2
LABEL=/boot      /boot       ext3       defaults 1 2
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
LABEL=SWAP-sda5   swap       swap        defaults 0 0

 /etc/fstab配置文件解释:

1.DEVICE: 文件系统的名称,可使用设备文件名或者文件系统的标签名称,即Label Name

2.挂载点:挂载的路径,必须是绝对路径。

3.FS_TYPE:文件系统的类型

4.MOUNT_OPTIONS :挂载参数

5.DUMP_FREQ:当使用dump工具时,是否需要备份,以及备份频率。

      1表示需要备份

      0表示不需要备份。

6.FSCK_ORDER:执行fsck时,是否要检查这个文件系统,以及检查的顺序

     0表示不检查

     非0:表示检查,并代表检查的顺序。

备注:

      1.测试/etc/fstab条目是否正确,可以使用mount -a命令

      2.当不存在/etc/fstab文件时,会因无法挂载文件系统而启动失败,不小心删除/etc/fstab的解决方法:

          将/etc/mtab文件做格式调整,复制成/etc/fstab(原因:linux会以fstab的格式把目前所有已挂载的文件系统信息

存储至/etc/mtab中)

4.检查文件系统

cache与buffer

 1.物理内存调用的效率远高于磁盘

 2.linux会把曾经读过的文件数据保存至cache/buffer,下次有进程需读取此文件时,直接读取缓存即可。

 3.当进程要写入数据道磁盘时,会先暂存在cache/buffer中,等负载较低时,再写入磁盘

 4.不正当关机,会造成cache/buffer中的数据来不及写入磁盘,导致文件内容损坏。linux在系统启动后,会自动修复

文件系统的状态,称为“文件系统检查”

文件系统检查

1.自动检查

系统启动后,状态为污秽的的文件系统会接受深入检查文件完整性。

文件系统以rw方式挂载时,且未正常卸载就关闭系统时,文件系统状态为污秽。

2.手动检查

#fsck [option] [DEVICE]

   -A   依据/etc/fstab设置,检查所有文件系统的完整性

   -a   自动修复文件系统

   -y   直接修复,不提示确认。

   -f    强制修复,即使为干净

   -C   显示进度条

   -N   不进行检查,只显示哪些检查会执行

DEVICE  文件系统的名称

#umount /dev/sdb1

#fsck -y /dev/sdb1

备注:不要对已挂载的文件系统执行fsck动作,因为fsck会破坏文件系统的结构。 

e2fsck 专用于修复ext类型文件系统

     -a/-p  自动修复

     -f   强制检查

 e2fsck -f -p /dev/sda5

111
原文地址:https://www.cnblogs.com/zmdsg/p/7120745.html