zoukankan      html  css  js  c++  java
  • 磁盘管理

    磁盘管理

    磁盘结构

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

    改变磁盘上磁性物质的方向,由此存储计算机中的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
  • 相关阅读:
    eclipse环境:把jdk1.6 改 jdk1.7或jdk1.8(改回也可以)(图文详解)
    SVN 将文件还原到之前的指定版本
    用起来很方便的枚举扩展类
    VS2015新功能
    EasyUi 动态列
    基于EasyUi的快速开发框架
    深圳某保险公司招聘职位列表
    考勤系统之计算工作小时数
    考勤系统之状态管理
    第一次裁员
  • 原文地址:https://www.cnblogs.com/zmdsg/p/7120745.html
Copyright © 2011-2022 走看看