磁盘管理

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
原文地址:https://www.cnblogs.com/xmtxh/p/12112785.html