笔记·存储&文件系统

管理分区:

    #lsblk        #列出块设备
    #fdisk         #管理MBR分区
    #gdisk         #管理GPT分区
    #parted     #高级分区操作,可以是交互或非交互方式
    #partprobe    #刷新分区表

    parted命令:
        parted /dev/sdb mklabel gpt|msdos
        parted /dev/sdb print
        parted /dev/sdb mkpart primary 1 200 (默认M)
        parted /dev/sdb rm 1
        parted -l 列出所有硬盘分区信息    fdisk和gdisk命令:

        fdisk -l [-u] [device...] 查看分区
        fdisk [device...] 管理MBR分区
        gdisk [device...] 类fdisk 的GPT分区工具
            p 分区列表
            t 更改分区类型
            n 创建新分区
            d 删除分区
            v 校验分区
            u 转换单位
            w 保存并退出
            q 不保存并退出
    #cat /proc/partations        #查看系统当前识别到的分区

管理文件系统:

    mkfs.FS_TYPE /dev/DEVICE
    mkfs -t FS_TYPE /dev/DEVICE
        -t {ext2|ext3|ext4|xfs}     #指定文件系统类型
        -b {1024|2048|4096}         #指定块 block 大小
        -L ‘LABEL’                     #设置卷标
        -j 相当于 -t ext3, mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
        -i         #数据空间中每多少个字节创建一个inode;不应该小于block大小
        -N         #指定分区中创建多少个inode
        -I         #一个inode记录占用的磁盘空间大小,128---4096
        -m         #默认5%,为管理人员预留空间占总空间的百分比
        -O FEATURE[,...]         #启用指定特性
        -O ^FEATURE             #关闭指定特性
    #blkid         #可以查看块设备属性信息
    #findfs        #查找分区
    #tune2fs    #重新设定ext系列文件系统可调整参数的值
        -l             #查看指定文件系统超级块信息;super block
        -L 'LABEL'     #修改卷标
        -m             #修预留给管理员的空间百分比
        -j             #将ext2升级为ext3
        -O             #文件系统属性启用或禁用, -O ^has_journal
        -o             #调整文件系统的默认挂载选项,-o ^acl
        -U UUID     #修改UUID号
    #dumpe2fs    #显示ext文件系统信息,将磁盘块分组管理
    #xfs_info    #显示示挂载或已挂载的 xfs 文件系统信息
    #fsck.FS_TYPE        #修复文件系统
    #fsck -t FS_TYPE
        -a 自动修复
        -r 交互式修复错误
    #e2fsck        #ext系列文件专用的检测修复工具
        -y 自动回答为yes
        -f 强制修复
        -p 自动进行安全的修复文件系统问题
    #xfs_repair    #xfs文件系统专用检测修复工具
        -f 修复文件,而设备
        -n 只检查
        -d 允许修复只读的挂载设备,在单用户下修复 / 时使用,然后立即reboot

挂载设备

    #mount [-fnrsvw] [-t vfstype] [-o options] device mountpoint            
        -t fstype 指定要挂载的设备上的文件系统类型,如:ext4,xfs
        -r readonly,只读挂载
        -w read and write, 读写挂载,此为默认设置,可省略
        -n 不更新/etc/mtab,mount不可见
        -a 自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能)
        -L 'LABEL' 以卷标指定挂载设备
        -U 'UUID' 以UUID指定要挂载的设备
        -B, --bind 绑定目录到另一个目录上
        -o options:(挂载文件系统的选项),多个选项使用逗号分隔
            async 异步模式,内存更改时,写入缓存区buffer,过一段时间再写到磁盘中,效率高,但不安全
            sync 同步模式,内存更改时,同时写磁盘,安全,但效率低下
            atime/noatime 包含目录和文件
            diratime/nodiratime 目录的访问时间戳
            auto/noauto 是否支持开机自动挂载,是否支持-a选项
            exec/noexec 是否支持将文件系统上运行应用程序
            dev/nodev 是否支持在此文件系统上使用设备文件
            suid/nosuid 是否支持suid和sgid权限
            remount 重新挂载
            ro/rw 只读、读写
            user/nouser 是否允许普通用户挂载此设备,/etc/fstab使用
            acl/noacl 启用此文件系统上的acl功能
            loop 使用loop设备
            _netdev 当网络可用时才对网络资源进行挂载,如:NFS文件系统
            defaults 相当于rw, suid, dev, exec, auto, nouser, async
        *一个挂载点同一时间只能挂载一个设备
        *一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏
        *一个设备可以同时挂载到多个挂载点
        *通常挂载点一般是已存在空的目录
    #umount 设备名|挂载点
    #mount                #通过查看/etc/mtab文件显示当前已挂载的所有设备
    #cat /proc/mounts    #查看内核追踪到的已挂载的所有设备
    #findmnt MOUNT_POINT|device        #查看挂载点情况
    #lsof MOUNT_POINT
    #fuser -v MOUNT_POINT            #查看正在访问指定文件系统的进程
    #fuser -km MOUNT_POINT            #终止所有在正访问指定的文件系统的进程

管理swap空间

    #swapon [OPTION]... [DEVICE]
        -a:激活所有的交换分区
        -p PRIORITY:指定优先级,也可在/etc/fstab 在第4列指定:pri=value
    #echo -e 'n\np\n\n\n+2G\nt\n82\nw\n' | fdisk /dev/sdc        #非交互式创建分区
    #mkswap /dev/sdc1
    #swapoff [OPTION]... [DEVICE]

磁盘常见工具

    df [OPTION]... [FILE]...        #文件系统空间实际真正占用等信息的查看工具 
        -H 以10为单位
        -T 文件系统类型
        -h human-readable
        -i inodes instead of blocks
        -P 以Posix兼容的格式输出
    du [OPTION]... DIR        #显示指定目录下面各个子目录的大小,单位为KB
        -h human-readable
        -s summary
        --max-depth=# 指定最大目录层级
        -x, --one-file-system #忽略不在同一个文件系统的目录
    dd 命令:convert and copy a file
        #dd if=/PATH/FROM/SRC of=/PATH/TO/DEST bs=# count=#
        if=file 从所命名文件读取而不是从标准输入
        of=file 写到所命名的文件而不是到标准输出
        ibs=size 一次读size个byte
        obs=size 一次写size个byte
        bs=size block size, 指定块大小(既是是ibs也是obs)
        cbs=size 一次转化size个byte
        skip=blocks 从开头忽略blocks个ibs大小的块
        seek=blocks 从开头忽略blocks个obs大小的块
        count=n 复制n个bs
        conv=conversion[,conversion...] 用指定的参数转换文件
        conversion 转换参数:
            ascii 转换 EBCDIC 为 ASCII
            ebcdic 转换 ASCII 为 EBCDIC
            lcase 把大写字符转换为小写字符
            ucase 把小写字符转换为大写字符
            nocreat 不创建输出文件
            noerror 出错时不停止
            notrunc 不截短输出文件
            sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐
            fdatasync 写完成前,物理写入输出文件
        范例:
            #dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1            #备份MBR
            #dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446        #破坏MBR中的bootloader
            #dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc        #有一个大与2K的二进制文件fileA。现在想从第64个字节位置开始读取,需要读取的大小是128Byts。又有fileB, 想把上面读取到的128Bytes写到第32个字节开始的位置,替换128Bytes
            dd if=/dev/sdx of=/dev/sdy                #将本地的/dev/sdx整盘备份到/dev/sdy
            dd if=/dev/sdx of=/path/to/image        #将/dev/sdx全盘数据备份到指定路径的image文件
            dd if=/dev/sdx | gzip >/path/to/image.gz        #备份/dev/sdx全盘数据,并利用gzip压缩,保存到指定路径
            dd if=/path/to/image of=/dev/sdx        #将备份文件恢复到指定盘            
            gzip -dc /path/to/image.gz | dd of=/dev/sdx        #将压缩的备份文件恢复到指定盘
            dd if=/dev/mem of=/root/mem.bin bs=1024            #将内存里的数据拷贝到root目录下的mem.bin文件
            dd if=/dev/cdrom of=/root/cdrom.iso                #拷贝光盘数据到root文件夹下,并保存为cdrom.iso文件
            dd if=/dev/urandom of=/dev/sda1            #销毁磁盘数据
            dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000        #通过比较dd指令输出中命令的执行时间,即可确定系统最佳的block size大小
            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 | dd of=/dev/null                    #测试硬盘读速度

RAID管理

    mdadm [mode] <raiddevice> [options] <component-devices>
        模式:
            创建:-C
            装配:-A
            监控:-F
            管理:-f, -r, -a
        <raiddevice>: /dev/md#
        <component-devices>: 任意块设备
        -C: 创建模式
            -n #: 使用#个块设备来创建此RAID
            -l #:指明要创建的RAID的级别
            -a {yes|no}:自动创建目标RAID设备的设备文件
            -c CHUNK_SIZE: 指明块大小,单位k
            -x #: 指明空闲盘的个数
        -D:显示raid的详细信息
            mdadm -D /dev/md#
        管理模式:
            -f: 标记指定磁盘为损坏
            -a: 添加磁盘
            -r: 移除磁盘
        观察md的状态: cat /proc/mdstat
    范例:
        #使用mdadm创建并定义RAID设备    mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sd{b,c,d,e}1
        #用文件系统对每个RAID设备进行格式化        mkfs.xfs /dev/md0
        #使用mdadm检查RAID设备的状况            mdadm --detail|D /dev/md0
        #增加新的成员        mdadm -G /dev/md0 -n4 -a /dev/sdf1
        #模拟磁盘故障        mdadm /dev/md0 -f /dev/sda1
        #移除磁盘            mdadm /dev/md0 -r /dev/sda1
        #在备用驱动器上重建分区        mdadm /dev/md0 -a /dev/sda1
        #系统日志信息                cat /proc/
        #生成配置文件:        mdadm -D -s >> /etc/mdadm.conf
        #停止设备:            mdadm -S /dev/md0
        #激活设备:            mdadm -A -s /dev/md0
        #强制启动:            mdadm -R /dev/md0
        #删除raid信息:        mdadm --zero-superblock /dev/sdb1

LVM管理

    pv管理工具:
        #pvs        #简要pv信息显示
        #pvcreate /dev/DEVICE        #创建pv
        #pvremove /dev/DEVICE        #删除pv

    vg管理工具:
        #vgs        #显示卷组
        vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
        #vgcreate -s 16M vg0 /dev/sdb /dev/sdc #指定PE的大小,默认4M
        #vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]    #扩容vg
        #vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]    #缩容vg
        删除卷组:先做pvmove,再做vgremove。

    lv管理工具:
        #lvs        #显示逻辑卷
        #lvcreate -L #[mMgGtT] -n NAME VolumeGroup        #创建lv
        #lvcreate -l 60%VG -n mylv testvg
        #lvcreate -l 100%FREE -n yourlv testvg
        #lvremove /dev/VG_NAME/LV_NAME        #删除lv
        重设文件系统大小:
            #fsadm [options] resize device [new_size[BKMGTEP]]
            #resize2fs [-f] [-F] [-M] [-P] [-p] device [new_size]
            #xfs_growfs /mountpoint
        范例:
            #创建物理卷            #pvcreate /dev/sda3
            #为卷组分配物理卷    #vgcreate vg0 /dev/sda3
            #从卷组创建逻辑卷    #lvcreate -L 256M -n data vg0

    扩展逻辑卷:
        #两步实现
        #第一步实现逻辑卷的空间扩展        #lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
        #第二步实现文件系统的扩展
            #针对ext
            resize2fs /dev/VG_NAME/LV_NAME
            #针对xfs
            xfs_growfs MOUNTPOINT
            
        #一步实现容间和文件系统的扩展
            #lvresize -r -l +100%FREE /dev/VG_NAME/LV_NAME

    缩减逻辑卷:缩减有数据损坏的风险,建议先备份再缩减,xfs文件系统不支持缩减
        umount /dev/VG_NAME/LV_NAME
        e2fsck -f /dev/VG_NAME/LV_NAME
        resize2fs /dev/VG_NAME/LV_NAME         #[mMgGtT]
        lvreduce -L [-]        #[mMgGtT] /dev/VG_NAME/LV_NAME
        mount /dev/VG_NAME/LV_NAME mountpoint

    缩减XFS文件系统的逻辑卷:
        #因为XFS文件系统不支持缩减,可以用下面方式缩减
        #先备份XFS文件系统数据        #yum -y install xfsdump
        #备份/data挂载点对应的逻辑卷
        #注意挂载点后面不要加/,否则会出错:        #xfsdump -f data.img /data
        #卸载文件系统        #umount /data
        #缩减逻辑卷            #lvreduce -L 10G /dev/vg0/lv0
        #重新创建文件系统    #mkfs.xfs -f /dev/vg0/lv0
        #重新挂载            #mount /dev/vg0/lv0 /data
        #还原数据            #xfsrestore -f data.img /data           

    跨主机迁移卷组:
        1 在旧系统中,umount 所有卷组上的逻辑卷
        2 禁用卷组
            vgchange -a n vg0
            lvdisplay
        3 导出卷组
            vgexport vg0
            pvscan
            vgdisplay
        4 拆下旧硬盘在目标计算机上,并导入卷组:
            vgimport vg0
        5 启用
            vgchange -ay vg0
        6 mount 所有卷组上的逻辑卷

LVM快照

        mkfs.xfs /dev/vg0/data
        mount /dev/vg0/data/ /mnt/data
    #为现有逻辑卷创建快照,注意ext4必须使用-p r 实现只读
        lvcreate -l 64 -s -n data-snapshot /dev/vg0/data
    #挂载快照,xfs注意要使用-o ro实现只读,访止快照被修改
        mkdir -p /mnt/snap
        mount -o ro,nouuid /dev/vg0/data-snapshot /mnt/snap
    #恢复快照
        umount /dev/vg0/data-snapshot
        umount /dev/vg0/data
        lvconvert --merge /dev/vg0/data-snapshot
    #删除快照
        umount /mnt/snap
        lvremove /dev/vg0/data-snapshot

posted @ 2022-07-25 18:06  Krill_ss  阅读(41)  评论(0编辑  收藏  举报