美文网首页
文件系统管理

文件系统管理

作者: 毛利卷卷发 | 来源:发表于2018-06-07 21:39 被阅读0次

    文件系统分类

    日志型文件系统: ext3, ext4, xfs, ...
    非日志型文件系统: ext2, vfat

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

    创建文件系统

    mkfs

    mkfs.FS_TYPE /dev/DEVICE:创建指定格式文件系统,常用选项:

    • mkfs -t FS_TYPE /dev/DEVICE:创建指定格式文件系统
    • mkfs -L 'LABEL' /dev/DEVICE:设定卷标

    mke2fs

    ext系列文件系统专用管理工具,常用选项如下:

    • -t ext2/ext3/ext4:创建指定格式文件系统
    • -b 1024/2048/4096:指定block大小
    • -L 'LABEL':设置卷标
    • -j:相当于-t ext3
    • -i #:为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小
    • -N #:指定分区中创建多少个inode
    • -I:一个inode记录占用的磁盘空间大小,128---4096
    • -m #:默认5%,为管理人员预留空间占总空间的百分比
    • -O FEATURE[,...]:启用指定特性
    • -O ^FEATURE:关闭指定特性

    ext文件系统专用

    blkid

    块设备属性信息查看,常用选项:

    • -U UUID:按UUID查找对应的设备
    • -L LABEL:按LABEL来查找对应的设备

    e2label

    更改ext系列文件系统的LABEL

    findfs

    查找分区

    # e2label改指定文件系统的LABEL
    [root@centos7 ~]# e2label /dev/sda6 what
    # findfs查指定LABEL对应的分区
    [root@centos7 ~]# findfs LABEL=what
    # findfs查指定UUID对应的分区
    [root@centos7 ~]# findfs UUID=7faa177d-373c-446f-ba99-e585b926ee9c
    

    tune2fs

    重新设定ext系列文件系统可调整参数的值,常用选项:

    • -l:查看指定文件系统超级块信息
    • -L 'LABEL':修改卷标
    • -m #:修预留给管理员的空间百分比
    • -j:将ext2升级为ext3
    • -O: 文件系统属性启用或禁用,–O ^has_journal
    • -o: 调整文件系统的默认挂载选项,–o ^acl
    • -U UUID: 修改UUID号

    dunpe2fs

    查看设备的块分组,也就是所有的block group

    • -h:查看超级块信息,不显示分组信息

    文件系统检测和修复

    因进程意外终止或者系统崩溃的时候,可能会造成文件损坏,此时应该检查并修复文件系统,建立离线修复。 注意一定不要再挂载状态下修复

    fsck

    fsck.FS_TYPE:检查和修复一个Linux的文件系统,常用选项:

    • -t FS_TYPE:指定文件系统
    • -p:不交互自动修复错误
    • -r:交互式修复错误

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

    e2fsck

    ext系列文件专用的检测修复工具,常用选项:

    • -y:自动回答yes
    • -f:强制修复

    挂载文件系统

    将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为,这时挂载点下的原有文件在挂载完成后会被临时隐藏,因此挂载点目录一般为空

    查看当前系统所有已经挂载的设备

    mount
    cat /etc/mtab
    cat /proc/mounts

    mount

    mount DEVICE MOUNT_POINT,常用选项:

    • -t vsftype:指定要挂载设备的文件系统类型,一般不需要指定
    • -r:readonly,只读挂载
    • -w:read and write, 读写挂载
    • -n:不更新/etc/mtab,mount不可见,cat /proc/mounts 可以看到用-n所隐藏的挂载信息
    • -a:自动挂载定义在了/etc/fstab文件中尚未挂载的文件系统,且挂载选项中有auto功能)
    • -L 'LABEL':以卷标指定挂载设备
    • -U 'UUID':以UUID指定要挂载的设备
    • -B/--bind:绑定目录到另一个目录上
    • -o:指定挂载选项
      • ro:只读
      • rw:读写
      • async/sync:异步传输
      • atime|noatime:记录atime
      • diratime/nodiratime:目录的访问时间戳
      • auto/noauto:是否支持自动挂载,是否支持-a选项
      • exec/noexec:是否支持在文件系统上运行应用程序
      • dev/nodev:是否支持在此文件系统上使用设备文件
      • suid/nosuid:是否支持suid和sgid权限
      • remount:重新挂载
      • user/nouser:是否允许普通用户挂载此设备
      • acl:启用此文件系统上的acl功能
      • loop:使用loop设备,losetup -a 可列出loop挂载的设备
      • defaults:相当于rw, suid, dev, exec, auto, nouser, async

    umount

    查看挂载情况:findmnt MOUNT_POINT/device

    查看正在访问指定文件系统的进程: lsof MOUNT_POINT/ fuser -v MOUNT_POINT(默认不递归,配合-m选项递归查看)

    终止所有在正访问指定的文件系统的进程:fuser -km MOUNT_POINT

    [root@localhost_v6(nanyibo) ~]# lsof /app/data1/
    COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    sleep   4137 root  cwd    DIR    8,8  2802688    2 /app/data1
    [root@localhost_v6(nanyibo) ~]# kill 4137
    
    [root@localhost_v6(nanyibo) ~]# fuser -vm /app/data1
    [root@localhost_v6(nanyibo) ~]# fuser -km /app/data1
    

    文件挂载配置文件

    [root@centos6 ~]# cat /etc/fstab 
    
    #
    # /etc/fstab
    # Created by anaconda on Wed May 16 05:35:31 2018
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    UUID=7e51be47-2999-407e-8e20-1c48096a3a8c /                       ext4    defaults        1 1
    UUID=48cbbc86-5d04-4957-903d-daa2fa6b869e /app                    ext4    defaults        1 2
    UUID=0d9c1147-0319-4cde-9038-ac35dc2cd732 /boot                   ext4    defaults        1 2
    UUID=102b3ecf-2f21-4ae1-9cb8-9cc5203bb638 swap                    swap    defaults        0 0
    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
    
    1. 设备名
    2. 挂载点
    3. 文件系统类型
    4. 挂载选项
    5. 转储频率(0:不做备份,1:每天转储,2:每隔一天转储)
    6. 自检次序(0:不自检,1:首先自检;一般只有rootfs才用1)

    swap

    挂载交换分区

    [root@centos6 ~]# dd if=/dev/zero of=swap.img bs=1M count=1024
    [root@centos6 ~]# mkswap swap.img
    [root@centos6 ~]# swapon /app/swap.img
    开机自动挂载,写入/etc/fstab文件中
    

    swapon [OPTION]... [DEVICE]:启用

    • -a:激活所有的交换分区
    • -p PRIORITY:指定优先级

    swapoff [OPTION]... [DEVICE]:禁用

    swap优先级

    用户可以指定swap分区0到32767的优先级,值越大优先级越高,如果用户没有指定,那么核心会自动给swap指定一个优先级,这个优先级从-1开始,每加入一个新的没有用户指定优先级的swap,会给这个优先级减一,因此先添加的swap的缺省优先级比较高,除非用户自己指定一个优先级,而用户指定的优先级(是正数)永远高于核心缺省指定的优先级(是负数)

    # 指定优先级
    [root@centos6 ~]# swapon -p xx /dev/sdaX
    # 通过写入/etc/fstab指定优先级
    UUID=5a1ff0b5-5c19-42e3-8b6a-65e7d332ee0c swap                    swap    defaults,pri=20        0 0
    UUID=8a5c6dbe-1025-462b-ad32-53ded1918d63 swap                    swap    defaults,pri=15        0 0
    /app/swap.img                             swap                    swap    defaults,pri=10        0 0
    

    移动介质

    eject:卸载或弹出磁盘

    创建iso文件:mkisofs -r -o etc.iso /etc/

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

    lsusb:查看USB设备是否识别

    常见工具

    free

    查看内存空间使用情况,常用选项:

    • -m:以MB为单位
    • -g:以GB为单位
    • -h:human-readable

    df

    查看文件系统空间占用等信息,常用选项:

    • -H:以1000为单位
    • -T:文件系统类型
    • -h:human-readable
    • -i:inodes instead of blocks
    • -P:以Posix兼容的格式输出,默认

    du

    查看某目录总体空间占用情况,常用选项:

    • -h:human-readable
    • -s:summary

    dd

    语法:dd if=/PATH/FROM/SRC of=/PATH/TO/DEST bs=# count=#,常用选项:

    • if=file:写到所命名的文件而不是到标准输出
    • of=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个记录

    备份MBR

    dd if=/dev/sdaof=/tmp/mbr.bakbs=512 count=1
    

    破坏MBR中的bootloader

    dd if=/dev/zero of=/dev/sdabs=64 count=1 seek=446
    

    有一个大与2K的二进制文件fileA。现在想从第64个字节位置开始读取,需要读取的大小是128Byts。又有fileB, 想把上面读取到的128Bytes写到第32个字节开始的位置,替换128Bytes

    dd if=fileAof=fileBbs=1 count=128 skip=63 seek=31
    

    将本地的/dev/sdx整盘备份到/dev/sdy

    ddif=/dev/sdx of=/dev/sdy
    

    将/dev/sdx盘数据备份到指定路径的image文件

    dd if=/dev/sdxof=/path/to/image
    

    备份/dev/sdx全盘数据,并利用gzip压缩,保存到指定路径

    dd if=/dev/sdx| gzip>/path/to/image.gz
    

    将备份文件恢复到指定盘

    dd if=/path/to/image of=/dev/sdx
    

    将压缩的备份文件恢复到指定盘

    gzip-dc /path/to/image.gz | dd of=/dev/sdx
    

    将内存里的数据拷贝到root目录下的mem.bin文件

    dd if=/dev/mem of=/root/mem.bin bs=1024
    

    拷贝光盘数据到root文件夹下,并保存为cd.iso文件

    dd if=/dev/cdrom of=/root/cd.iso
    

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

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

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

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

    测试硬盘写速度

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

    测试硬盘读速度

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

    修复硬盘

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

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

    练习

    1. 通过/etc/fstab ,指定挂载点,可以查出对应的分区名

      [root@centos6 ~]# dir=/;findfs `cat /etc/fstab |grep -w $dir |cut -d" " -f1`
      [root@centos6 ~]# dir=/;findfs $(cat /etc/fstab |grep "[[:space:]]$dir[[:space:]]" | cut -d" " -f1)
      [root@centos6 ~]# dir=/app;findfs $(cat /etc/fstab |grep "$dir[[:blank:]]"|sed -r "s@(.*)[[:blank:]]+$dir.*@\1@")
      
    2. 创建一个2G的文件系统,块大小为2048byte,预留1%可用空间,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/test目录,且默认有acl挂载选项

      [root@centos6 ~]# mke2fs -t ext4 -b 2048 -m 1 -L 'TEST'
      [root@centos6 ~]# echo "/dev/sda6      /test   ext4   defaults,acl 0 0" >> /etc/fstab 
      
    3. 写一个脚本,完成如下功能:

      (1) 列出当前系统识别到的所有磁盘设备
      (2) 如磁盘数量为1,则显示其空间使用信息
      否则,则显示最后一个磁盘上的空间使用信息

      #!/bin/bash
      # 列出所有磁盘
      fdisk -l|grep "Disk /"
      
      # 查出磁盘总扇区数
      all=`fdisk -l |sed -n "2p"|cut -d' ' -f7`
      
      # 查出已用扇区数
      use=`fdisk -l |tail -1 |tr -s ' '|cut -d' ' -f3`
      
      # 计算磁盘使用率
      user=`echo "scale=2;${use}/${all}" |bc|cut -d. -f2`
      echo "${user}%"
      
    4. 将CentOS6的CentOS-6.8-x86_64-bin-DVD1.iso和CentOS-6.8-x86_64-bin-DVD2.iso两个文件,合并成一个CentOS-6.8-x86_64-Everything.iso文件,并将其配置为yum源

      # 把两个iso文件放在一个空目录,然后把目录做成iso文件
      mkisofs -r -o centos6.iso /centos6/
      # 挂在mnt上,因为不是文件系统,所以要用-o loop选项
      mount -o loop centos6.iso /mnt
      

    相关文章

      网友评论

          本文标题:文件系统管理

          本文链接:https://www.haomeiwen.com/subject/fwpnsftx.html