zoukankan      html  css  js  c++  java
  • (转)磁盘管理(一,二)

    磁盘管理(一)

    本章节内容:

    磁盘结构

    分区类型

      管理分区

      管理文件系统

      挂载设备

    一、磁盘结构:

    1、设备号码:

     主设备号:major number, 标识设备类型

    次设备号:minor number, 标识同一类型下的不同设备

     blob.png 

    2、磁盘接口类型:

       并行:IDE、SISC

       串口:SATA 、SAS 、USB

       rpm:rotatons、per minute

    3、磁盘设备的设备文件命名:

       IDE:/dev/hd

       SISC:/dev/sda、/dev/sdb、……   (不同的设备,使用a-z)

       (同一设备上,不同的分区,采用数字来命名区分,如:/dev/sda1、/dev/sda2……)

    4、  磁盘结构及磁盘存储:

    如下图,结构:磁臂、电机、扇区(secotr)磁道(track)、磁头(head)、盘片、柱面(cylinder)

       blob.png

    (注:每个磁道有63个扇区,每个盘面有1024个磁道,每个磁盘最多有255个磁头,每个扇区最多能存储512个字节。柱面:每个盘面都有零磁道/扇区,每个盘片有两面,因此每个盘片有两个零磁道/扇区,每个磁盘有多个盘片,所以,磁盘的所有零磁道/扇区组成的立体为零柱面,其他柱面也是如此!)

    二、分区类型:

    1、首先了解为什么要分区?

       A、 优化I/O性能

    B、实现磁盘空间配额限制

    C、提高修复速度

    D、隔离系统和程序

    E、安装多个OS

    2、磁盘的两种分区方式:

       MBR 、GPT

    (1)MBR分区:采用32位表示扇区数,分区不超过2T。

       0磁道0扇区:512bytes(446bytes为boot loader;64bytes为分区表(16bytes标示一个分区);2bytes为55aa)

       支持最多4个主分区(3个主分区+1扩展分区[N个逻辑分区])

       blob.png

    (2)GPT分区:最大支持128个主分区,使用64位,支持8Z(512bytes/block)和64Z(4096bytes/block)。

         使用128位UUID 表示磁盘和分区GPT分区表自动备份在头和尾两份,并有CRC校验位。

       UEFI (统一扩展固件接口)硬件支持GPT。

       blob.png

    3、查看硬盘分区信息:

       A、命令lsblk

       B、cat /proc/mounts

       C、ls /dev/sd*

    4、检查磁盘是否分区:

     blob.png

    5、备份磁盘和还原分区表:

     备份:dd if=/dev/sda of=/root/mbr bs=1 count=512

     blob.png

     还原:dd if=mbr of=/dev/sda

     如下图,查看备份出来的mbr分区表信息(注:或者在备份前也可以使用命令查看,#hexdump -C -n 512 /dev/sda)

     blob.png

     blob.png

    6、清除分区表信息(写零):

       命令:dd if=/dev/zero of=/dev/sdc bs=1 count=64 skip=446 seek=446(跳过446字节)

    7、清除boot loader信息(写零):

       命令:dd if=/dev/zero of=/dev/sdc bs=1 count=446

     blob.png

    注:上面所提到的清除步骤,勿在系统安装的磁盘上操作。

    三:管理分区:

    1、如何列出系统中的磁盘分区:(命令#lsblk)

      blob.png

      命令:blkid查看分区的UUID、系统类型等信息

     blob.png

    2、分区创建:

    fdisk

    gdisk

    主要创建MBR分区,也支持GPT,但对于一块磁盘最多只能管理15个分区

    主要创建GPT分区,也可以将MBR分区转换成GPT

    # fdisk /dev/sda(功能选项)

    blob.png

    # gdisk /dev/sda (功能选项)

    blob.png

    blob.png

    blob.png

     

    blob.png

    blob.png blob.png

    注:parted高级分区操作(创建、复制、调整大小等等)

    3、同步分区表命令:

     

    CentOS5

    CentOS6

    CentOS7

    新建分区同步

    #partprobe /dev/DEVICE

    partx -a -n M:N /dev/DEVICE

    kpartx -a /dev/DEVICE -f: force

    #partprobe /dev/DEVICE

    删除分区同步

    #partprobe /dev/DEVICE

    partx -d -n M:N /dev/DEVICE 删除一个分区

    partx -d –nrN-M  /dev/DEVICE 删除多个分区

    #partprobe /dev/DEVICE

    4、parted命令创建GPT分区:

     #parted /dev/sdb mklabel gpt(parted /dev/sdb mklabel msdos[MBR])

     blob.png

     blob.png 

     # parted /dev/sdb mkpart primary 1 1024  (从1开始到1024分1G)

     blob.png

     删除分区:#parted /dev/sdb rm 1  (1为分区的编号)

     blob.png

       注:parted的操作都是实时生效的,小心使用

    四、管理文件系统:

    1、什么是文件系统:

       文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。

       从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等。

    2、文件系统类型:

       Linux文件系统: ext2, ext3, ext4, xfs(SGI), btrfs(Oracle), reiserfs, jfs(AIX), swap(交换分区)、光盘(iso9660)

       Windows:fat32, ntfs

       Unix: FFS(fast), UFS(unix), JFS2

       网络文件系统:NFS, CIFS

       集群文件系统:GFS2, OCFS2(oracle)

      分布式文件系统:ceph, moosefs, mogilefs, glusterfs, Lustre

       RAW:未经处理或者未经格式化产生的文件系统

    3、文件系统类型分类:

       根据其是否支持"journal"功能:

    日志型文件系统: ext3, ext4, xfs, …

    非日志型文件系统: ext2, vfat

     文件系统的组成部分:

    内核中的模块:ext4, xfs, vfat

    用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat

        Linux的虚拟文件系统:VFS

       查前支持的文件系统:cat /proc/filesystems

    4、创建文件系统:

       (1)、mkfs命令:

            使用格式有:mkfs.ext2 、mkfs.ext3、 mkfs.ext4、 mkfs.xfs 、mkfs.btrfs 、mkfs.vfat

            如下图:

            blob.png

            使用选项:

                -t FSTYPE[DEVICE]:ext2 ext3 ext4

                即:mkfs.ext2=mkfs -t ext2

           blob.png

             blob.png

           

             -L :设置分区卷标

               #mkfs.ext4 /dev/sda2 -L ‘卷标名称’

             blob.png

       (2)、mke2fs命令:管理格式化ext系列的文件系统。

          #mke2fs -t {ext2|ext3|ext4} /dev/sda3

          或 -j: 相当于-t ext3

    mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3

          blob.png

    5、ext系列文件系统的管理工具:

       (1)、mke2fs命令:ext系列文件系统专用管理工具

        -b {1024|2048|4096}

    -L 'LABEL'

    -i #: 为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小

        -N #:为数据空间创建个多少个inode

    -I 一个inode记录大小128—4096

    -m #: 默认5%,为管理人员预留空间占总空间的百分比

    -O FEATURE[,…]:启用指定特性

    -O ^FEATURE:关闭指定特性

    例题:选项-O的使用,如下图关闭指定特性日志功能:

    blob.png

    blob.png

    (2)blkid系统分区信息查询:

     A、blkid:块设备属性信息查看

    blkid[OPTION]… [DEVICE]

    -U UUID: 根据指定的UUID来查找对应的设备

    -L LABEL:根据指定的LABEL来查找对应的设备

     B、e2label:管理ext系列文件系统的LABEL

    # e2label DEVICE [LABEL]

     C、findfs:查找分区

    findfs[options] LABEL=<label>

    findfs[options] UUID=<uuid>

       (3)tune2fs:重新设定ext系列文件系统可调整参数的值

    -l:查看指定文件系统超级块信息;super block

    -L 'LABEL':修改卷标

    -m #:修预留给管理员的空间百分比

    blob.png

    -j: 将ext2升级为ext3

    -O: 文件系统属性启用或禁用,-O ^has_journal

    -o: 调整文件系统的默认挂载选项,-o ^acl

    例题:启用分区的日志功能,如下图:

    blob.png

    blob.png

    -U UUID: 修改UUID号(此处可以通过命令产生随机UUID:#uuidgen)

    blob.png

      (4)dumpe2fs:

                 查看superblock:dumpe2fs /dev/sda3

    -h:查看超级块信息(分组信息),分区用分组管理

    6、文件系统的检测与修复:

       常发生于死机或者非正常关机之后;挂载为文件系统标记为“dirty”

       fsck: File System Check

        fsck.FS_TYPE

        fsck -t FS_TYPE

        -a: 自动修复错误

        -r: 交互式修复错误

    blob.png

    blob.png

     注意: FS_TYPE一定要与分区上已经文件类型相同;

     e2fsck:ext系列文件专用的检测修复工具

    -y:自动回答为yes

    -f:强制修复

    blob.png

    五:管理挂载设备:

        1、什么是挂载和卸载:

       挂载:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为。

       卸载:为解除此关联关系的过程

    2、挂载条件与特殊:

       挂载点目录一般为空

       挂载点下原有文件在挂载完成后会被临时隐藏

    3、挂载和卸载命令:

       进程正在使用的设备是无法被卸载的。

       把设备关联挂载点:mount /PATH/TO/dir

         卸载时:umount /PATH/TO/dir

         blob.png

    4、挂载方法:

    A、mount /dev/sda3 /mnt/sda3

    B、mount -L ‘backup’(卷标名) /mnt/sda3

    C、mount -U ‘UUID号’ /mnt/sda3

    5、挂载后的操作:

    A、查看挂载情况:findmnt /mnt/sda3

    B、查看正在访问指定文件系统的进程:losf /mnt/sda3或fuser /mnt/sda3

    C、终止所有正在访问指定的文件系统的进程:fuser –km /mnt/sda3

    6、mount命令:(注:mount挂载使用所相应的选项达到的效果都不是永久的,机器一旦重启将丢失。)

    A、使用格式:mount [-fnrsvw] [-t vfstype] [-o options] device dir

           B、常用选项:

                   -t vsftype:指定要挂载的设备上的文件系统类型

                   -r: readonly,只读挂载

                  blob.png

                   -w: read and write, 读写挂载

                   -n: 不更新/etc/mtab,相当于#mount

                   -a:自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能)

                   -L 'LABEL': 以卷标指定挂载设备

                   -U 'UUID': 以UUID指定要挂载的设备

                   -B, –bind: 绑定目录到另一个目录上

                   查看内核追踪到的已挂载的所有设备:cat /proc/mounts

           C、-o的常用选项:

                 -o options:(挂载文件系统的选项),多个选项使用逗号分隔

    async:异步模式

    sync:同步模式,内存更改时,同时写磁盘

    atime/noatime:包含目录和文件

    diratime/nodiratime:目录的访问时间戳

    auto/noauto:是否支持自动挂载,是否支持-a选项

    exec/noexec:是否支持将文件系统上运行应用程序

    dev/nodev:是否支持在此文件系统上使用设备文件(dev:mkdir /mnt/sda3/cdrom ;mknod cdrom b 11 0;mount /dev/sda3/cdrom /media/)

    suid/nosuid:不否支持suid和sgid权限

    remount:重新挂载

    ro:只读

    rw:读写

    user/nouser:是否允许普通用户挂载此设备,默认管理员才能挂载

    acl:启用此文件系统上的acl功能(在CentOS6上系统安装完成后新分出来的分区是不启用acl的,此处虽然可以挂载时生效启用acl,但不是永久有效的,建议还是用tune2fs -o acl /dev/sda3  )

                  Defaults:相当于rw, suid, dev, exec, auto, nouser, async

                   

      

    演示:分区,格式,挂载

      分区:

      blob.png

      blob.png

      blob.png

                    

      格式化:

      blob.png

      blob.png         

      blob.png         

               

      分区挂载:

      blob.png

      blob.png         

    原创文章,作者:Aaron_wang,如若转载,请注明出处:http://www.178linux.com/40200

    磁盘管理(二)之swap、dd工具使用

    一、挂载点和/etc/fstab

    (1)配置文件/etc/fstab,当系统启动时,自动加载该文件,会把写在配置文件里面的所有挂载点全部自动挂载上去,只要按照格式写,就不会丢失。

    (2)文件挂载配置文件,如下图:

    blob.png

    /etc/fstab每行定义一个要挂载的文件系统;

    要挂载的设备或伪文件系统(设备文件、LABEL(LABEL="")、UUID(UUID="")、伪文件系统名称(proc, sysfs))

    挂载点

    文件系统类型(光盘:iso9660;文件挂文件的类型则为:none,选项为bind)

    挂载选项 (defaults——相当于rw, suid, dev, exec, auto, nouser, async)

    转储频率(0:不做备份;1:每天转储;2:每隔一天转储)

    自检次序(0:不自检;1:首先自检;一般只有rootfs才用1)

    (3) 使用mount -a 命令生效挂载在/etc/fstab中的所有文件系统

    (4)使用文件来模拟分区,用来测试格式化等操作(当磁盘空间已经全部分完),则可以使用下面的命令来创建:

    #dd if=/dev/zero of=/testdir/partfile bs=1M count=500

    blob.png

    如上图,同样可以使用格式化命令mkfs.ext4都可以对该文件进行格式化。

    当格式化完成后,使用命令blkid查看时是没有改文件系统的,则需要使用mount命令来进行挂载,如下图:

    blob.png

    但在挂载的过程中会出现下图中错误,需要按照提示来添加相应的选项即可。

    blob.png

    挂载完成后,使用命令#mount,可以看到,这文件的挂载是映射到了/dev/loop上。通过这样设置,可以通过文件来做“移动硬盘”使用。

    blob.png

    (注:在CentOS6上,loop设备默认是8个;在CentOS7上,loop则是随机生成,没有数量上的限制。如果是使用loop设备来挂载,则使用命令#losetup /dev/loop3 /testdir/partfile;mount /dev/loop3 /mnt/partfile3)

    通过在/etc/fstab上设置,让系统开机自检挂载(永久生效自动挂载)

    blob.png

    二、swap交换分区:

    1、swap交换分区是系统RAM的补充。

    (如下图,命令#free显示的以k为单位;#free -m是以M为单位显示;#free -g是以G为单位显示)

    blob.png

    2、如何知道系统中的swap是由谁提供的?

    命令#cat /proc/swaps

    blob.png

    3、由于分区的局限性(已经分好分区的swap是无法扩展的),因此如何进行swap的增加,如下图:

    blob.png

    新分区做为swap,并修改分区编号保存后,如下图:

    blob.png

    4、格式化swap:

    mkswap -L swap_sba6 /dev/sda6

    blob.png

    blob.png

    5、修改/etc/fstab:

    blob.png

    6、激活所有的swap:

    #swapon –a

    (注:可以使用命令#swapon -s 查看激活的swap)

    blob.png

    7、设置swap的优先级:

    (pri的设置为0至32767)

    #vim /etc/fstab

    defaults的默认设置优先级是负数,所以需要手动去设置swap的优先级,如下图:

    blob.png

    在/etc/fstab设置完优先级后,要使用命令#swapoff /dev/sda6禁用;再用命令#swapon -a 激活

    blob.png

    8、swap的优先级了解:

    如果用户没有指定,那么核心会自动给swap指定一个优先级,这个优先级从-1开始,每加入一个新的没有用户指定优先级的swap,会给这个优先级减一。

    先添加的swap的缺省优先级比较高,除非用户自己指定一个优先级,而用户指定的优先级(是正数)永远高于核心缺省指定的优先级(是负数)。

    优化性能:分布存放,高性能磁盘存放

    9、使用文件来做swap :

    (当磁盘的分区把空间全部用完了,可以考虑使用文件来做swap分区)如下图:

    blob.png

    blob.png

    blob.png

    生效:#swapon -a

    blob.png

    10、swap的删除:

    首先要禁用:#swapoff /dev/sda6 ;#swapoff /testdir/swapfile

    blob.png

    然后到配置文件/etc/fstab上删除相应的添加记录,删除相应的分区和文件(rm -rf /testdir/swapfile)即可。

    blob.png

    三、移动介质挂载使用:(移动硬盘因为格式为ntfs使用不了)

    #mount /dev/sd? /mnt/usb

    拔除U盘前需要做的动作是命令#sync(最好执行三次,以免数据没有写入到U盘上)

    #umount /mnt/usb 然后拔除U盘

    四、光盘的使用

    mount /dev/cdrom/mnt/

    eject命令卸载或弹出光驱磁盘;eject -t 弹入光驱

    创建ISO文件:

    cp /dev/cdrom /root/centos7.iso

    mkisofs -r -o /root/etc.iso /etc (将目录打包成ISO,作为备份)

    刻录光盘:wodim -v -eject centos.iso

    五、常见工具:

    内存空间使用状态:free

    -m: 以MB为单位

    -g: 以GB为单位

    blob.png

    文件系统空间占用等信息的查看工具:df

    -H 以1000为单位

    blob.png

    -T 文件系统类型

    blob.png

    -h: human-readable

    blob.png

    -i:inode sinstead of blocks

    -P: 以Posix兼容的格式输出(较多用于设备名称过长、显示不整齐时)

    blob.png

    查看某目录总体空间占用状态:du

    -h: human-readable

    -s: summary

    blob.png

    六、dd工具的使用:

    1、dd命令:convert and copy a file

    2、用法:

    ddif=/PATH/FROM/SRC of=/PATH/TO/DEST

    bs=#:block size, 复制单元大小

    count=#:复制多少个bs

    of=file写到所命名的文件而不是到标准输出

    if=file从所命名文件读取而不是从标准输入

    bs=size指定块大小(既是是ibs也是obs)

    ibs=size一次读size个byte

    obs=size 一次写size个byte

    cbs=size 一次转化size个byte

    skip=blocks从开头忽略blocks个ibs大小的块

    seek=blocks从开头忽略blocks个obs大小的块

    count=n只拷贝n个记录

    cbs=size 一次转换多少byte

    3、conv=conversion[,conversion…] 用指定的参数转换文件。

    转换参数:

    ascii 转换EBCDIC 为ASCII

    ebcdic 转换ASCII 为EBCDIC

    block 转换为长度为cbs 的记录,不足部分用空格填充。

    unblock 替代cbs长度的每一行尾的空格为新行

    lcase 把大写字符转换为小写字符

    ucase 把小写字符转换为大写字符

    nocreate不创建输出文件

    noerror 出错时不停止

    notrunc 不截短输出文件。

    sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐

    4、磁盘拷贝:ddif=/dev/sdaof=/dev/sdb

    备份MBR:ddif=/dev/sdaof=/tmp/mbr.bakbs=512 count=1

    破坏MBR中的bootloader:ddif=/dev/zero of=/dev/sdabs=64 count=1 seek=446

    5、备份:

    将本地的/dev/sdx整盘备份到/dev/sdy:dd if=/dev/sdx of=/dev/sdy

    将/dev/sdx全盘数据备份到指定路径的image文件:dd if=/dev/sdx of=/path/to/image

    备份/dev/sdx全盘数据,并利用gzip工具进行压缩,保存到指定路径:dd if=/dev/sdx|gzip >/path/to/image.gz

    6、恢复:

    将备份文件恢复到指定盘:dd if=/path/to/image of=/dev/sdx

    将压缩的备份文件恢复到指定盘:gzip -dc /path/to/image.gz | dd of=/dev/sdx

    7、拷贝内存资料到硬盘

    将内存里的数据拷贝到root目录下的mem.bin文件:dd if=/dev/mem of=/root/mem.bin bs=1024

    从光盘拷贝iso镜像:dd if=/dev/cdrom of=/root/cd.iso

    8、销毁磁盘数据

    dd if=/dev/urandom of=/dev/sda1

    注:利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。执行此操作以后,/dev/sda1将无法挂载,创建和拷贝操作无法执行。

    9、得到最恰当的block size

    dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file

    dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file

    dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file

    dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file

    通过比较dd指令输出中所显示的命令执行时间,即可确定系统最佳的block size大小

    10、测试硬盘读写速度

    dd if=/root/1Gb.file bs=64k | dd of=/dev/null

    dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000

    通过上两个命令输出的执行时间,可以计算出测试硬盘的读/写速度

    11、修复硬盘

    dd if=/dev/sda of=/dev/sda

    当硬盘较长时间(比如1,2年)放置不使用后,磁盘上会产生消磁点。当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生。且这个过程是安全,高效的。

    1、创建一个2G的文件系统,块大小为2048byte,预留1%可用空间,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/testdir目录,且默认有acl挂载选项

    blob.png

    blob.png

    blob.png

    blob.png

    blob.png

    blob.png

    2、写一个脚本,完成如下功能:

    (1) 列出当前系统识别到的所有磁盘设备;

    (2) 如磁盘数量为1,则显示其空间使用信息;

    否则,则显示最后一个磁盘上的空间使用信息;

    脚本代码:

    blob.png

    脚本执行效果:

    blob.png

    原创文章,作者:Aaron_wang,如若转载,请注明出处:http://www.178linux.com/41077

  • 相关阅读:
    新浪JavaScript库
    Java中创建的对象多了,必然影响内存和性能
    Fidder抓包设置
    JavaScript处理股票数据
    按钮控制示例
    JavaScript更改css样式
    AppCan模拟器调试
    AppCan调试问题
    Java虚拟机JVM学习04 类的初始化
    COM组件和调用详细教程
  • 原文地址:https://www.cnblogs.com/liujiacai/p/8280767.html
Copyright © 2011-2022 走看看