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

    linux 磁盘管理

    Linux磁盘及文件系统管理
    机械
           柱面、扇区、磁道
           5400rpm
           7200rpm
           10krpm
           15krpm
    固态

           接口类型:
                  IDE:并口,133MBps
                  SATA:串口,6gbps
                  SCSI:并口,640MBps
                  SAS:串口,6gbps
                  USB:串口,3.0 480MBps
                  NetWork:1000M

    查看磁盘分区信息
    fdisk -l         ****
    lsblk            *****
    gdisk -linux ***
    partx -s /dev/sda

    创建文件系统:
           格式化:低级格式化(分区之前进行、划分隧道)、高级格式化(分区之后对分区进行,创建文件系统)

                  元数据区、数据区
                         元数据区:inode
                         大小、权限、属主属组、时间戳、数据块指针
                         符号链接文件:存储数据指针的空间当中存储的是真实文件的访问路径;
                         设备文件:存储数据指针的空间当中存储的设备号;
    /dev/sda1

    VFS:Virtual File System
            Linxu的文件系统:ext2、ext3、ext4、xfs、reiserfs、btrfs
            光盘:ISO9660
            网络文件系统:nfs、cifs
            集群文件系统:gfs2、ocfs2
            内核级分布式文件系统:ceph
            Windows的文件系统:vfat、ntfs
            伪文件系统:prop、sysfs、tmpfs、hogepagefs
            Unix的文件系统:UFS、FPS、JPS
            交换文件系统:SWAP
            用户空间的文件系统:mogilfs、moosefs、glusterfs

    文件系统管理工具
           创建文件系统的工具
                  mkfs
           检测及修复文件系统的工具
                  fsck
           查看其属性的工具
                  dumpe2fs、tune2fs
           调整文件系统的特性
                  tune2fs

    内核级文件系统的组成部分:
           文件系统驱动:由内核提供
           文件系统管理工具:由用户空间的应用程序提供

    磁盘容量检查

    1.使用df命令查看磁盘容量,不加参数以k为单位

    df -i  //查看inode使用情况
    df -h //以G或者T或者M人性化方式显示
    df -T //查看文件类型
    //使用df命令查看磁盘,下面分别介绍每列什么含义
    [root@localhost ~]# df -h
    文件系统                 容量  已用  可用 已用% 挂载点
    Filesystem               Size  Used Avail Use% Mounted on
    devtmpfs                 2.0G     0  2.0G    0% /dev

     2.使用lsblk查看分区情况

    [root@localhost ~]# lsblk 
    NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda               8:0    0   20G  0 disk 
    |-sda1            8:1    0    1G  0 part /boot
    `-sda2            8:2    0   19G  0 part 

     3.使用du命令查看目录或者文件的容量,不加参数以k为单位

     du -sh /opt //人性化输出显示大小
     -s:列出总和
     -h:人性化显示容量信息
    磁盘分区Fdisk
    选项:
     -b <大小>             扇区大小(5121024、2048或4096)
     -c[=<模式>]           兼容模式:“dos”或“nondos”(默认)
     -h                    打印此帮助文本
     -u[=<单位>]           显示单位:“cylinders”(柱面)或“sectors”(扇区,默认)
     -v                    打印程序版本
     -C <数字>             指定柱面数
     -H <数字>             指定磁头数
     -S <数字>             指定每个磁道的扇区数

    小于2TB存储磁盘,可选分区工具fdisk

    //生产分区建议:如无特殊需求,直接使用整个磁盘即可,无需分区
    //学习分区建议:1P+1E(3L) 2P+1E(2L) 3P+1E(1L)(仅适用于练习)

    [root@localhost ~]# fdisk -l
    [root@localhost ~]# fdisk /dev/sda
    命令(输入 m 获取帮助):                       //输入m列出常用的命令
    Command action
       a   toggle a bootable flag                 //切换分区启动标记
       b   edit bsd disklabel                     //编辑sda磁盘标签
       c   toggle the dos compatibility flag      //切换dos兼容模式
       d   delete a partition                     //删除分区
       g   create a new empty GPT partition table //新建GPT空白分区表
       G   create an IRIX (SGI) partition table   //创建IRIX(SGI)分区表
       l   list known partition types             //显示分区类型
       m   print this menu                        //显示帮助菜单
       n   add a new partition                    //新建分区
       o   create a new empty DOS partition table //创建新的空白分区表
       p   print the partition table              //显示分区表的信息
       q   quit without saving changes            //不保存退出
       s   create a new empty Sun disklabel       //创建新的sun磁盘标签
       t   change a partition's system id         //修改分区ID,可以通过i查看id
       u   change display/entry units             //修改容量单位,磁柱或扇区
       v   verify the partition table             //检验分区表
       w   write table to disk and exit           //保存退出
       x   extra functionality (experts only)     //拓展功能
    //删除分区
    Command (m for help): d
    Partition number (1-3, default 3):  
    Partition 3 is deleted
    
    Command (m for help): d
    Partition number (1,2, default 2): 
    Partition 2 is deleted
    
    Command (m for help): d
    Selected partition 1
    
    //新建主分区
    Command (m for help): n
    Partition type:
       p   primary (0 primary, 0 extended, 4 free)
       e   extended
    Select (default p): p
    Partition number (1-4, default 1): 
    First sector (2048-41943039, default 2048): 
    Using default value 2048
    Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +100M
    Partition 1 of type Linux and of size 100 MiB is set

    注意:当创建主分区等于4个的时候,此时磁盘无论是否还有空间,都将无法分配新的分区,此时应该将
           第四个分区替换成扩展分区在进行分配,此时继续分区将都是逻辑分区

    //查看分区创建   
    Command (m for help): p  
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1            2048      206847      102400   83  Linux
    /dev/sdb2          206848    10692607     5242880   83  Linux
    /dev/sdb3        10692608    21178367     5242880   83  Linux
    /dev/sdb4        21178368    41943039    10382336    5  Extended
    /dev/sdb5        21180416    25374719     2097152   83  Linux
    /dev/sdb6        25376768    31668223     3145728   83  Linux
    /dev/sdb7        31670272    41943039     5136384   83  Linux
    //保存分区   
    Command (m for help): w  
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    Syncing disks.
    
    //检查磁盘是否为MBR分区方式   
    [root@localhost ~]# fdisk -l /dev/sdb | grep type
    Disk label type: dos
    
    //安装parted,刷新内核立即生效,无需重启
    [root@localhost ~]# yum install -y parted 
    [root@localhost ~]# partprobe /dev/sdb
    //查看日志
    [root@localhost ~]# tail /var/log/messages 
    Dec 26 10:01:01 localhost systemd: Started Session 2 of user root.
    Dec 26 10:42:02 localhost kernel: sdb: sdb1 sdb2 sdb3 sdb4 < sdb5 sdb6 sdb7 >
    Dec 26 10:42:02 localhost kernel: sdb: sdb1 sdb2 sdb3 sdb4 < sdb5 sdb6 sdb7 >
    Dec 26 10:43:03 localhost kernel: sdb: sdb1 sdb2 sdb3 sdb4 < sdb5 sdb6 sdb7 >
    Dec 26 10:50:54 localhost kernel: sdb: sdb1 sdb2 sdb3 sdb4 < sdb5 sdb6 sdb7 >
    Dec 26 10:50:54 localhost kernel: sdb: sdb1 sdb2 sdb3 sdb4 < sdb5 sdb6 sdb7 >
    Dec 26 11:01:01 localhost systemd: Started Session 3 of user root.
    Dec 26 11:04:27 localhost kernel: sdb: sdb1 sdb2 sdb3 sdb4 < sdb5 sdb6 sdb7 >
    Dec 26 11:04:27 localhost kernel: sdb: sdb1 sdb2 sdb3 sdb4 < sdb5 sdb6 sdb7 >
    Dec 26 11:04:51 localhost kernel: sdb: sdb1 sdb2 sdb3 sdb4 < sdb5 sdb6 sdb7 >

    磁盘分区Gdisk

    大于2TB使用分区工具

    [root@xiaoming ~]# gdisk /dev/sdc
    Command (? for help): n //创建新分区
    Partition number (1-128, default 1): 
    First sector (34-6291455966, default = 2048) or {+-}size{KMGTP}: 
    Last sector (2048-6291455966, default = 6291455966) or {+-}size{KMGTP}: +100M
    Command (? for help): p //打印查看
    Number Start (sector) End (sector) Size Code Name
    1 2048 206847 100.0 MiB 8300 Linux filesystem
    
    Command (? for help): w //保存分区
    Do you want to proceed? (Y/N): y
    OK; writing new GUID partition table (GPT) to /dev/sdc.
    The operation has completed successfully.
    
    //检查磁盘是否是gpt格式
    [root@xiaoming ~]# fdisk -l /dev/sdc|grep type 
    WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
    Disk label type: gpt
    
    //安装parted,刷新内核立即生效,无需重启
    [root@localhost ~]# yum install -y parted 
    [root@localhost ~]# partprobe /dev/sdb

    磁盘格式化Mkfs

    mkfs格式化磁盘,实质创建文件系统

    mkfs常用的选项有
    -b //设定数据区块占用空间大小,目前支持1024、2048、4096、bytes每个块。
    -t //用来指定什么类型的文件系统,可以是ext4,xfs
    -i //设定inode的大小
    -N //设定inode数量,防止inode数量不够导致磁盘不足
    -L //预设该分区的标签label
    //格式化整个sdb磁盘为ext4文件系统
    [root@xiaoming ~]# mkfs.ext4 /dev/sdb
    
    //也可格式化整个sdb1分区为xfs文件系统
    [root@xiaoming ~]# mkfs.ext4 /dev/sdb1

    磁盘挂载Mount

    磁盘的分区和格式化之后,如何使用,这就涉及到了挂载这块磁盘。

    挂载分区前需要创建挂载点,挂载点以目录形式出现
    如何往挂载点目录写入数据,实际上会写入到该分区
    挂载点建议是空目录,不是也不影响挂载分区的使用

    临时挂载磁盘

    mount命令
        mount [-fnrsvw] [-t vfsytpe] [-o options] device directory
        -r:readonly
        -w:read and write
        -n:默认情况下,设备挂载或卸载的操作会同步更新至/etc/mtab文件中,-n用于禁用此特性;
        -t:指明要挂载的设备上的文件系统的类型:多数情况下可以省略,此时mount会通过blkid来判断挂载的设备的文件系统类型
        -L:LABEL:挂载时以卷标的方式指明设备
        -U UUID:挂载时以UUID的方式指明设备。
    //-o option:挂载参数,可写fstab配置文件,也可以mount时使用-o参数指定
    参数              参数意义                            系统默认值
    async       系统每隔一段时间把内存数据写入磁盘中     
    sync        时时同步内存和磁盘中的数据
    suid,nosuid 允许/不允许分区有suid属性                 suid
    rw,ro       可以指定文件系统是只读(ro)或可写(rw)      rw
    exec,noexec 允许/不允许可执行文件执行,不要挂载跟分区 exec
    user,nouser 允许/不允许root外的其他用户挂载分区       nouser
    auto,noauto 开机自动挂载/不自动挂载                   auto
    default     默认文件系统挂载设置 rw,suid,dev,exec,auto,nouser,async
    /etc/fstab文件
    每行定义一个要挂载的文件系统及相关属性:
        6个字段:
           1)要挂载的设备:
               设备文件:
               LABEL:
               UUID
               伪文件系统:如sysfs、proc、tmpfs等;
            2)挂载点
               swap类型的设备挂载点为swap
            3)文件系统类型   
            4)挂载选项:
               defaults:使用默认挂载选项:
               如果需要同时指明多个挂载选项,彼此间以逗号分隔;
            5)转储频率(备份):
               0:从不备份
               1:每天备份一次
               2:每隔一天备份一次
            6)自检次序:
               0:不自检
               1:首先自检,通常只能是跟文件系统
               2:次级自检           

    命令:mount挂载磁盘,实质为文件系统指定访问入口

    mount -t //指定文件系统挂载分区,如ext4,xfs
    mount -a //读取/etc/fstab配置文件的所有分区
    mount -o //指定挂载参数
    //fstab被损坏情况下,让只读文件系统可写(正常情况下不使用)
    [root@xiaoming ~]# mount -o rw,remount /
    
    //挂载/dev/sdb1至db1目录
    [root@xiaoming ~]# mkdir -pv /db1
    [root@xiaoming ~]# mount -t xfs /dev/sdb1 /db1/
    
    //报错信息如下
    [root@xiaoming ~]# mount /dev/sdb1 /data1
    mount: /dev/sdb1 is write-protected, mounting read-only
    mount: unknown filesystem type '(null)'
    //解决办法,格式化报错的分区
    [root@xiaoming ~]# mkfs.xfs /dev/sdb1
    meta-data=/dev/sdb1              isize=512    agcount=4, agsize=6400 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=1        finobt=0, sparse=0
    data     =                       bsize=4096   blocks=25600, imaxpct=25
             =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    log      =internal log           bsize=4096   blocks=855, version=2
             =                       sectsz=512   sunit=0 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    [root@xiaoming ~]# mount /dev/sdb1 /data1

     永久挂载磁盘

    //使用blkid命令获取各分区的UUID
    [root@xiaoming ~]# blkid | grep "sdb1"
    /dev/sdb1: UUID="26b84a63-b5ce-4fba-9854-82ec721703ab" TYPE="xfs"
    
    //使用UUID挂载磁盘sdb1分区至于db1,临时挂载
    [root@xiaoming ~]# mount UUID="26b84a63-b5ce-4fba-9854-82ec721703ab" /data1
    
    使用uuid自动挂载:
    [root@xiaoming ~]# blkid /dev/sdb1 | awk '{print $2}'>>/etc/fstab 
    [root@xiaoming ~]# blkid /dev/sdb2 | awk '{print $2}'>>/etc/fstab 
    [root@xiaoming ~]# blkid /dev/sdb3 | awk '{print $2}'>>/etc/fstab 
    [root@xiaoming ~]# blkid /dev/sdc1 | awk '{print $2}'>>/etc/fstab 
    [root@xiaoming ~]# blkid /dev/sdc2 | awk '{print $2}'>>/etc/fstab 
    [root@xiaoming ~]# cat /etc/fstab
    ......
    UUID="26b84a63-b5ce-4fba-9854-82ec721703ab" /data1 auto defaults 0 0 
    UUID="4789c813-0177-4642-bd60-d3cc52b99850" /data2 auto defaults 0 0
    UUID="0e49b4c4-499f-4a72-8627-1b99471779a5" /data3 auto defaults 0 0
    UUID="df66844e-c306-40c4-bf78-81e484ce089a" /data4 auto defaults 0 0
    UUID="12bbd29a-45d9-4acb-8cd0-c6cd09f556e8" /data5 auto defaults 0 0

    indows server 2008服务器操作系统
    我们的移动设备(移动硬盘),有时通过usb接上以后,可以识别硬盘,但是看不到分区,是因为系统没有自动分配盘符

    //读取/etc/fstab配置文件的所有分区
    [root@xiaoming ~]# mount -a
    
    卸载挂载磁盘
    umount -lf //强制性卸载挂载
    
    //使用站点目录卸载
    [root@xiaoming data3]# umount /data1
    //使用设备名卸载/dev/sdb1
    [root@xiaoming data3]# umount /dev/sdb1
    //umout不能卸载的情况
    [root@xiaoming data3]# umount /dev/sdb3
    umount: /data3: target is busy.
            (In some cases useful info about processes that use
             the device is found by lsof(8) or fuser(1))
    
    //如上情况解决办法有两种,切换至其他目录,或使用“-l”选项强制卸载
    [root@xiaoming data3]# umount -l /dev/sdb3

    虚拟磁盘SWAP
    分区一般指定虚拟内存的大小为实际内存的1-1.5倍。如果实际内存超过8GB,可以直接划分16GB给虚拟内存即可,如果虚拟内存不够用的情况,
    须增加一个虚拟磁盘,由于不能给原有的磁盘重新分区,所以可以选择新建。

    1.创建swapfile
    [root@xiaoming data3]# dd if=/dev/null of=/opt/swapfile bs=40K count=102400
    //if:指定源,一般写/dev/zero
    //of:指定目标
    //bs:指定块大小
    //count:数量
    
    2.格式化swap分区
    [root@xiaoming ~]# mkswap [-f] /opt/swapfile 
    Setting up swapspace version 1, size = 4095996 KiB
    no label, UUID=78974789-cfee-45a5-a0f2-6c86706f1f80
    
    3.检测当前swap分区情况
    [root@xiaoming ~]# free -m
                  total        used        free      shared  buff/cache   available
    Mem:           1819         129          71           9        1619        1518
    Swap:          2047           0        2047
    
    4.启动虚拟磁盘,并检查
    //启动swapfile时,会提示权限过高,按照提示修改即可
    [root@xiaoming ~]# swapon /opt/swapfile 
    swapon: /opt/swapfile: insecure permissions 0644, 0600 suggested.
    
    [root@xiaoming ~]# free -m
                  total        used        free      shared  buff/cache   available
    Mem:           1819         132          67           9        1619        1514
    Swap:          6047           0        6047
    
    5.关闭寻磁盘,并检查
    [root@xiaoming ~]# swapoff /opt/swapfile 
    [root@xiaoming ~]# free -m
                  total        used        free      shared  buff/cache   available
    Mem:           1819         129          70           9        1619        1517
    Swap:          2047           0        2047

    创建swap分区并且持久化使用

    查看内存和交换分区的使用情况
    free -m
    
    1.新建一个分区,并且把分区类型改为82
    Command (m for help): l 列出所以分区类型
    
    fdisk /dev/sdb
    Command (m for help): t 修改分区类型
    Partition number (1-6, default 6): 5  修改分区号
    Hex code (type L to list all codes): 82   修改分区类型
    Changed type of partition 'Linux' to 'Linux swap / Solaris'
    
    Command (m for help): p
    ....
    /dev/sdb5        21180416    31666175     5242880   82  Linux swap / Solaris
    
    Command (m for help): w
    partprobe /dev/sdb
    
    2.把sdb2格式化为交换分区
    [root@xiaoming ~]# mkswap /dev/sdb5
    mkswap: /dev/sdb5: warning: wiping old ext4 signature.
    Setting up swapspace version 1, size = 5242876 KiB
    
    3.启动交换分区
    swapon /dev/sdb5或swapon -a 启动所有的交换分区
    
    查看inode使用情况
    swapon -s
    
    4.持久化保存交换分区的使用
    blkid /dev/sdb5
    /dev/sdb5: UUID="bdd41e71-9694-40b8-b054-fdf8eaf8105c" TYPE="swap" 
    blkid /dev/sdb5 | awk '{print $2}' >>/etc/fstab 
    vim /etc/fstab
    ...
    UUID="bdd41e71-9694-40b8-b054-fdf8eaf8105c"  swap       swap     defaults    0 0

    生产磁盘故障案例
    inode被沾满,导致磁盘有可用的剩余空间也无法继续使用

    [root@xiaoming ~]# df -i /data1
    Filesystem     Inodes IUsed IFree IUse% Mounted on
    /dev/sdb1       51200     3 51197    1% /data1
    
    //inode被沾满
    [root@xiaoming ~]# touch /data1/{1..51300}.txt
    touch: cannot touch '/data1/51262.txt': No space left on device
    touch: cannot touch '/data1/51263.txt': No space left on devic
    ....
    
    //inode被沾满,剩余block也是无法继续使用
    Filesystem     Inodes IUsed IFree IUse% Mounted on
    /dev/sdb1       51200 51200     0  100% /data1
    [root@xiaoming ~]# df -h /data1
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sdb1        97M   33M   65M  34% /data1
    
    //处理办法
    [root@xiaoming ~]# find /data1 -size -1k -delete

    Block空间即将被沾满,但删除大文件也没有释放空间

    假设现在线上正在运行Nginx服务、Nginx产生的日子已经达到了20个G,磁盘眼看着就要满了,请问不重启Ngnix方式如何解决

    //是会删除文件,但Nginx持续占用着文件,所以空间并不会被释放
     rm -f access.log
    
    //正确的做法如下,清空该文件即可释放文件内容
    > access.log
  • 相关阅读:
    Node.js核心模块-net
    ie8兼容rgba写法
    Node.js核心模块-http
    Node.js核心模块-fs文件系统
    js监听滚动结束
    mac本地安装全局包报错npm WARN checkPermissions
    安全测试回顾(一)
    python学习笔记(二):python数据类型
    python学习笔记(一):python简介和入门
    Centos下安装Redis
  • 原文地址:https://www.cnblogs.com/xmtxh/p/12112785.html
Copyright © 2011-2022 走看看