快捷搜索:

您的位置:澳门新葡4473网站 > 新闻社区 > Linux 中/data 数据分区磁盘空间不足,如何挂载磁

Linux 中/data 数据分区磁盘空间不足,如何挂载磁

发布时间:2019-11-03 08:54编辑:新闻社区浏览(52)

    首先,咱们需要模拟一下环境,下图  使用VMware为我添加一块300G(实际200M~~手动滑稽 -_-)的硬盘设备。

    linux磁盘管理,linux磁盘

    摘自:

    1. 查看磁盘或者目录的容量
      df 查看磁盘各分区使用情况
      不加参数以k为单位
      df -i inode数,df -h 以G或者T或者M
      df -m 以M单位显示

    du 查看目录或者文件的容量
    不加参数 以k为单位显示
    -s 列出总和 -a 列出所有文件和目录
    -k 以k为单位 -m 以M为单位
    -h 最合适的单位 最常用组合 -sh
    扩展 ls -lh 看到的大小和du相比

    1. 磁盘的分区和格式化
      fdisk -l 查看磁盘和分区,大于2T用GPT
      fdisk 设备名 m 列出常用命令,常用的有‘p’, ‘n’, ‘d’, ‘w’, ‘q’.
      mke2fs, mkfs.ext2, mkfs.ext3, mkfs.ext4
      -t 文件系统格式 ext3 ext4
      -b 指定每个数据块大小,目前支持1024, 2048 及4096
      -L 分区标签
      格式化时默认blocks (5.00%) reserved for the super user //给超级用户预留的一部分空间,用来作为特殊用途
      -m 可以更改这个比例,如 mke2fs -m 0.1 /dev/sdb1 //意思是,只预留出0.1%

    2. 挂载、卸载磁盘分区
      mount 不加任何选项和参数,查看已经挂载情况
      mount 格式 mount -t type /dev/sda5 /mnt
      mount -t 指定挂载分区格式,如 -t ext3
      umount /dev/sda5 或者 umount /mnt
      umount -l 强制卸载
      mount -o 后面跟各种选项,比如remount,ro,noatime等,具体选项如下:

    “async/sync” : async表示和磁盘和内存不同步,系统每隔一段时间把内存数据写入磁盘中,而sync则会时时同步内存和磁盘中数据;
    “auto/noauto” : 开机自动挂载/不自动挂载;
    “default” : 按照大多数永久文件系统的缺省值设置挂载定义,它包含了rw, suid, dev, exec, auto, nouser, async
    “ro” : 按只读权限挂载 ;
    “rw” : 按可读可写权限挂载 ;

    “exec/noexec” : 允许/不允许可执行文件执行,但千万不要把根分区挂载为noexec,那就无法使用系统了,连mount命令都无法使用了,这时只有重新做系统了;
    “user/nouser” : 允许/不允许root外的其他用户挂载分区,为了安全考虑,请用nouser ;
    “suid/nosuid” : 允许/不允许分区有suid属性,一般设置nosuid ;
    “usrquota” : 启动使用者磁盘配额模式,磁盘配额相关内容在后续章节会做介绍;
    “grquota” : 启动群组磁盘配额模式;

    特殊用法:mount -o loop 1.iso /mnt #挂载镜像文件
    mount --bind /dir1 /dir2 #挂载目录

    mount -a 会根据/etc/fstab 挂载所有分区
    UUID是如何来的,使用命令 blkid
    blkid命令 后可以不跟设备名,列出所有
    mount UUID=“……” /mnt
    使用UUID的好处是,多块磁盘,如果在服务器上换了插槽位置,设备名会变,但UUID是唯一的

    1. 配置文件 /etc/fstab
      第一列就是分区的标识,可以LABEL,也可以UUID,当然也可以 (/dev/sda1);
      第二列是挂载点;
      第三列是分区的格式;
      第四列则是mount的一些挂载参数,一般情况下,直接写defaults即可;
      第五列的数字表示是否被dump备份,是的话这里就是1,否则就是0;第六列是开机时是否自检磁盘。1,2都表示检测,0表示不检测,
      / 分区必须设为1,而且整个fstab中只允许出现一个1,1比2优先级高,所以先检测1,然后再检测2,如果有多个分区需要开机检测那么都设置成2吧,
      1检测完了后会同时去检测2。

    lvm配置 (参考内容,大家自行实践)
    LVM是Linux环境中对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上、文件系统之下的一个逻辑层,可提高磁盘分区管理的灵活性。支持动态扩充磁盘空间。
    首先从空的硬盘sdb上创建两个分区sdb1 1G, sdb2 2G。
    1)创建逻辑卷
    pvcreate /dev/sdb1 /dev/sdb2 //创建物理卷
    pvdisplay //可以列出已经创建的物理卷
    vgcreate vgdata /dev/sdb1 /dev/sdb2 //创建卷组 vgdata ,并将刚才创建好的两个物理卷加入该卷组
    vgdisplay //可以列出已经建好的卷组
    #默认PE大小为4MB,PE是卷组的最小存储单元.可以通过 –s参数修改大小。

    lvcreate -L 500M -n lvdata1 vgdata //分割500M给新的逻辑卷lvdata1
    lvdisplay //列出当前的逻辑卷

    mkfs.ext4 /dev/vgdata/lvdata1 //格式化逻辑卷
    mount /dev/vgdata/lvdata1 /aming //挂载逻辑卷

    2)扩展逻辑卷
    逻辑卷lvdata1不够用了,我们如何给他增加空间呢?
    lvextend –L +500M /dev/vgdata/lvdata1 //给lvdata1增加500M空间。
    resize2fs /dev/vgdata/lvdata1 //同步文件系统

    3)扩展卷组
    当卷组不够用的情况下,我们也是可以扩展卷组的。我们再创建一个新的分区叫做/dev/sdb3.
    vgextend vgdata /dev/sdb3 //把sdb3加入到卷组vgdata中

    4)减少逻辑卷大小
    卸载 --> e2fsck 检测剩余空间 --> resize2fs 同步文件系统 --> 使用lvreduce命令将逻辑卷减少
    注意:文件系统大小和逻辑卷大小一定要保持一致才行。如果逻辑卷大于文件系统,由于部分区域未格式化成文件系统会造成空间的浪费。

    umount /data1
    e2fsck -f /dev/mapper/vgdata-lvdata1
    resize2fs /dev/mapper/vgdata-lvdata1 700M
    lvreduce -L 700M /dev/vgdata/lvdata1
    mount /dev/vgdata/lvdata1 /data1

    5) 当磁盘或分区损坏时,如何转移数据
    pvmove 转移空间数据 --> vgreduce命令将即将坏的磁盘或者分区从卷组vgdata里面移除除去 --> pvremove命令将即将坏的磁盘或者分区从系统中删除掉 --> 拆除或修复磁盘
    pvmove /dev/sdb1
    vgreduce vgdata /dev/sdb1
    pvremove /dev/sdb1

    6) 删除整个逻辑卷
    umount卸载逻辑卷 --> 修改配置文件/etc/fstab(若是之前更改过) --> lvremove 删除逻辑卷lvdata1 --> vgremove 删除卷组vgdata --> pvremove 将物理卷转化成普通分区
    umount /dev/vgdata/lvdata1
    lvremove /dev/vgdata/lvdata1
    vgremove vgdata
    pvremove /dev/sdb2
    pvremove /dev/sdb3

    摘自:

    1. 查看磁盘或者目录的容量...

    图片 1

    按照步骤一步一步添加就好。添加完成后需要重启你的虚拟机,方能生效。

    图片 2

    OK,那么咱们的环境就有了。我已经为咱们的“服务器”安装了个300G(200M)的硬盘了,现在咱们把它挂载到 /data 下。

    第一步,为新磁盘创建分区。

    [root@~]# ll /dev/sdb*    #检查第二块硬盘,及分区
    brw-rw---- 1 root disk 8, 16 Aug 15 14:35 /dev/sdb
    #这里显示,你有第二块磁盘,但是没有分区啊,兄弟~~
    

      为磁盘创建分区,可以用两个命令,fdisk  and  parted 。这里咱们先讲 fdisk 。parted等下再说

    fdisk 命令,-c 选项:关闭dos兼容模式,-u 以扇区为单位为磁盘分区。

    当需要为你的磁盘分的细致一些的时候可以使用,咱们现在要把300G都挂载到 /data 就不使用命令选项了。

    下面是等下需要用到的 fdisk  内部指令含义:

    m  显示帮助。       n   创建分区。      p  显示磁盘分区信息。     d   删除分区。      w   保存并退出。     q   退出不保存。

    [root@~]# fdisk /dev/sdb      #fdisk 命令后面直接加 磁盘文件就好
    
    WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
             switch off the mode (command 'c') and change display units to
             sectors (command 'u').
    #这里的警告信息就是,建议你关闭dos兼容模式,且启用-u选项,简单说就是让你使用 -cu 选项。
    不过这个警告并不需要太在意,它只会在磁盘未分区时显示,且不会对咱们下面的操作有任何影响。
    Command (m for help): p   #先看一下磁盘分区情况
    
    Disk /dev/sdb: 213 MB, 213909504 bytes
    64 heads, 32 sectors/track, 204 cylinders
    Units = cylinders of 2048 * 512 = 1048576 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x1bf8bec7
    
       Device Boot      Start         End      Blocks   Id  System
    
    #嗯,空白的    就是没有进行过磁盘分区。
    Command (m for help): n      #创建磁盘分区
    Command action
       e   extended
       p   primary partition (1-4)   #这里是系统提示,是按 e 创建扩展分区,还是按 p 创建主分区了?
    p                #咱们就准备整一个分区,自然选择 p  主分区啦~~
    Partition number (1-4): 1        #键入1 , 就是1号主分区的意思。
    First cylinder (1-204, default 1):“回车键” (按下Enter)    #这里是让你选择分区开始的柱面,回车就是默认,最初的意思            
    Using default value 1
    Last cylinder, +cylinders or +size{K,M,G} (1-204, default 204):“回车键” (按下Enter)   #这里是让你选择分区结束的柱面,回车就是默认,最后的意思    
    Using default value 204    (创建好了)
    
    Command (m for help): p        #咱们再看一下
    
    Disk /dev/sdb: 213 MB, 213909504 bytes
    64 heads, 32 sectors/track, 204 cylinders
    Units = cylinders of 2048 * 512 = 1048576 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x1bf8bec7
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1               1         204      208880   83  Linux
    #嗯嗯,分区名称/dev/sdb1,大小差不多“300G”
    Command (m for help): w     # 键入 w ,一定要保存后退出。不然所有的设置都不会生效。
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    Syncing disks.
    

      fdisk -l 查看一下磁盘的信息。

    [root@~]# fdisk -l| grep '/dev/sdb'
    
    Disk /dev/sdb: 213 MB, 213909504 bytes
    /dev/sdb1               1         204      208880   83  Linux
    
    #这就说明咱们的磁盘分区已经创建OK。
    

     第二步,为你的分区创建文件系统(格式化)

    首先要手动更新一下,让系统知道 sdb 磁盘分区表有变化了~~

    [root@~]# partprobe /dev/sdb
    [root@~]# 
    
    # 傲娇的Linux 并不会给你任何提示。但是这个步骤必不可少
    

     然后直接给分区装个 ext4文件系统就好了

    [root@~]# mkfs.ext4 /dev/sdb1    #mkfs 命令接 .ext4 中间不需要使用空格。后面要跟分区的文件名,并不是磁盘文件名,这个要注意。
    mke2fs 1.41.12 (17-May-2010)
    ··························此处省略数行
    Writing superblocks and filesystem accounting information: done
    
    This filesystem will be automatically checked every 21 mounts or
    180 days, whichever comes first.  Use tune2fs -c or -i to override.
    #最后这两个提示信息是最重要的,它的意思是说:这个文件系统将在21次挂载或是180天以后自动检查,使用 tune2fs -c 或-i 可以覆盖掉默认自动检查。
    

     反正我是不需要系统默认检查什么的,那我就直接关掉好了,就使用它建议的 tune2fs 命令就好了。

    [root@~]# tune2fs -c 0 -i 0 /dev/sdb1    # -c 和 -i 后面都是零(不检查的意思),还是磁盘分区文件~~
    tune2fs 1.41.12 (17-May-2010) 
    Setting maximal mount count to -1
    Setting interval between checks to 0 seconds
    #提示信息我就不逐条翻译了,大概意思就是系统不会自动检查了。
    

     第三步,将 /dev/sdb1 挂载~~到 /data ,并实现开机自动挂载。

    mount 挂载,这个简单,我就不讲了。

    [root@~]# mount /dev/sdb1 /data
    [root@~]# df -h            #最好 df -h 查看一下
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda3        19G  2.3G   16G  13% /
    tmpfs           490M     0  490M   0% /dev/shm
    /dev/sda1       190M   66M  115M  37% /boot
    /dev/sdb1       194M  1.8M  182M   1% /data
                   #这里不应该是300G吗,难道是我挂错了?- _ -?
    

     开机自动实现挂载的方法有很多,咱们就简单的讲三种好了。

    方法一:通过 /etc/rc.local   实现开机运行 mount /dev/sdb1 /data 。来实现开机自动挂载

    [root@~]# ll /etc/rc.local 
    lrwxrwxrwx 1 root root 13 Aug  6 17:57 /etc/rc.local -> rc.d/rc.local
    # /etc/rc.local  是 /etc/rc.d/rc.local 的符号链接。在root权限下直接修改符号链接的文件就可以了。
    [root@~]# vim /etc/rc.d/rc.local      #但是我有强迫症,我就要修改源文件。哼哼~~
    
    #!/bin/sh
    #
    # This script will be executed *after* all the other init scripts.
    # You can put your own initialization stuff in here if you don't
    # want to do the full Sys V style init stuff.
    
    touch /var/lock/subsys/local
    mount /dev/sdb1 /data            #编写这么一句就好了,但是我不建议这么做。可能是因为比较Low吧
    

    方法二:通过 /etc/fstab 实现开机自动挂载

    [root@~]# vim /etc/fstab
    #
    # /etc/fstab
    # Created by anaconda on Sat Jul 28 14:15:11 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=4b7f430b-398b-4ca4-a6f4-75e11c8498f0 /                       ext4    defaults        1 1
    UUID=b001470a-e506-4b50-a705-7b4343ac6a7c /boot                   ext4    defaults        1 2
    UUID=ec344814-973b-45d3-95f0-7ce6265b3247 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
    /dev/sdb1               /data/                  ext4    defaults        0 0
    #第一列设备的名称         #第二列 挂载点(目录)     #3,文件系统类型   #4,defaults 是默认挂载参数   
    #第一个 0 是指是否进行备份 0(不进行) 第二个 0 是指是否开机磁盘检查 0 (不检查)
    

    方法三:通过chkconfig 实现开机自动启动。

    这个方法我也不太建议,毕竟chkconfig还是用来启用系统服务比较好,挂载的事情还是交给 fstab 的好。

    下面的链接就是我写的如何实现chkconfig的开机自启动~~链接,有兴趣的可以看下。

    至于fdisk  与  parted 的区别,咱们明天再讲~

    本文由澳门新葡4473网站发布于新闻社区,转载请注明出处:Linux 中/data 数据分区磁盘空间不足,如何挂载磁

    关键词: