linux磁盘及文件系统管理

写在前面:

    博客书写牢记5W1H法则:What,Why,When,Where,Who,How。

本篇主要内容:

● 磁盘相关概念罗列

 磁盘接口类型

 机械式硬盘相关概念

 设备文件命名与接口类型识别

 磁盘分区格式:MBR与GTP

 文件系统相关概念及VFS

● 磁盘相关命令详解

 fdisk

 ln

 mkfs/mke2fs

 e2label

 tune2fs

 dumpe2fs

 fsck/e2fsck

 blkid

● swap分区

 mkswap

 swapon

 swapoff

● 文件系统挂载

 mount

 umount

 开机挂载

   /etc/fstab配置

● 文件系统、目录容量统计

 df

 du


(一)磁盘相关概念罗列:


硬盘速率单位:

   bps:bits per second

   Bps:Bytes per second


磁盘接口类型:

   并口:同一线缆可以接多块设备:

      IDE:两个,主(master)/从(slave),133MB/s

      SCSI:宽带16-1个;窄带:8-1个。Ultrascsi320, 320MB/S, UltraSCSI640, 640MB/S

   串口:同一线缆只可以接一个设备;

      SATA:串口,6gbps

      SAS:串口,6gbps

      USB:串口,480MB/s


机械式硬盘相关概念:

   机械硬盘里面有一或多个盘片,每个盘片两面都有磁头,2磁头同一个机械臂,同步运动

   track:磁道。硬盘磁片上同一个同心圆扇区组成的圆

      如:windows的C盘其实是最外围的磁道

   sector:扇区。磁盘的最小物理存储单位。

      扇区大小有两种:512bytes和4Kbytes,一般也都为512bytes

   cylinder:柱面。由于磁盘里面可能有多个磁盘,多个同心圆扇区组合成的圆。

      分区划分基于柱面


设备类型回顾:

   块(block):随机访问,数据交换单位为“块”。

   字符(character):线性访问,数据交换单位为“字符”。


设备文件命名:

   linux设备文件在/dev/目录下,起到关联设备驱动程序,提供设备访问入口的功能。

   设备号:

      major:主设备号。区分设备类型,用于标明设备所需的驱动程序;

      minor:次设备号。区分同种类型下的不同设备;是特定设备访问入;

      如:/dev/sda,其中sd就是主设备号,a就是次设备号


磁盘接口类型的识别:

   IDE: /dev/hd[a-z]

      例如:/dev/hda, /dev/hdb

   SCSI, SATA, USB, SAS: /dev/sd[a-z]

   分区:

      /dev/sda#:/dev/sda1, ...

   注意:CentOS 6、7统统将硬盘设备文件标识为/dev/sd[a-z]#


引用设备分区方式:

   设备文件名(即设备路径)。如/dev/sda1

   卷标(LABEL)。如MYDATA

   UUID。唯一标示,随机生成的一长串字符。如“6a3c5155-7e5f-42c6-8479-da6afcbfb442”


磁盘分区格式:

   第一扇区记录了分区格式信息

   MBR:(Master Boot Record)

      记录于第一扇区,由于老的硬盘扇区大小都是512bytes,所以MBR占用512bytes空间:按照每个扇区512bytes计算,MBR只能支持到大概2.2TB的空间,再大则无法识别其余部分。也可以增加扇区大小来缓解MBR这方面的不足,使其支持更大的空间。

         446bytes:bootloader, 程序,引导启动操作系统的程序;

         64bytes:分区表,每16bytes标识一个分区,一共只能有4个分区

            4主分区

            3主1扩展:n逻辑分区

         2bytes:MBR区域的有效性标识;55AA为有效;

   GPT:(GUID Partition Table)

      GPT将磁盘所有区块以LBA(由于新硬盘有些以4Kbytes为一个扇区,所以统一将512bytes叫做一个LBA)来规划,GTP使用34个LBA区块来记录分区信息。另外,整个磁盘的最后33个LBA也拿来作为另一个备份。

         LBA0;记录了整个磁盘采用GPT格式

         LBA1:记录了整个分区表的位置和大小,以及备份用的GPT分区的位置

         LBA2-33:记录每条分区的相关信息

            每个LBA有512bytes,用来记录4个分区信息,所以每个分区占用128bytes。除了记录标示符和相关信息外,每条记录分别提供64bites来记录开始/结束的扇区号码。因此其最大容量限制为:2^64*512bytes=2^63*1Kbytes=2^33TB=8ZB,其中1ZB=1^30TB。另外,由于有32个LBA存储分区记录,所以最多可以有32*4=128个分区!


文件系统相关概念:

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

   元数据区,数据区

      元数据区:

         文件元数据:inode (index node)

            大小、权限、属主属组、时间戳、数据块指针

         目录元数据:

            与文件元数据类似

         目录数据区:

            存储了本目录下所有文件名和对应inode号码

         注意:元数据区并没有存储文件名,文件名是存储在目录所在的数据区的。


   符号链接文件:存储数据指针的空间当中存储的是真实文件的访问路径;

   设备文件:存储数据指针的空间当中存储的是设备号(major, minor);


   bitmap index:位图索引


   VFS: Virtual File System

      Linux的文件系统: ext2(无journal功能,即无日志), ext3, ext4, xfs, reiserfs, btrfs

      光盘:iso9660

      网络文件系统:nfs, cifs

      集群文件系统:gfs2, ocfs2

      内核级分布式文件系统:ceph

      windows的文件系统:vfat, ntfs

      伪文件系统:proc, sysfs, tmpfs, hugepagefs

      Unix的文件系统:UFS, FFS, JFS

      交换文件系统:swap

      用户空间的分布式文件系统:mogilefs, moosefs, glusterfs


(二)硬盘相关命令详解

fdisk

   Partition table manipulator for Linux

   fdisk -l [-u] [device...]

   fdisk device

   fdisk提供了一个交互式接口来管理分区,它有许多子命令,分别用于不同的管理功能;所有的操作均在内存中完成,没有直接同步到磁盘;直到使用w命令保存至磁盘上

   常用命令:

      n:创建新分区

      d:删除已有分区

      t:修改分区类型

      l:查看所有已经ID

      w:保存并退出

      q:不保存并退出

      m:查看帮助信息

      p:显示现有分区信息


   注意:在已经分区并且已经挂载其中某个分区的磁盘设备上创建的新分区,内核可能在创建完成后无法直接识别;


   查看:cat  /proc/partitions

   通知内核强制重读磁盘分区表:

      CentOS 5:partprobe [device]

      CentOS 6,7:partx, kpartx

         partx -a [device]

         kpartx -af [device]

其他分区创建工具:parted、sfdisk、cfdisk、gdisk(专为GPT分区的工具)


链接文件:ln命令

   访问同一个文件不同路径;

   硬链接:指向同一个inode的多个文件路径;

      特性:

         (1) 目录不支持硬链接;

         (2) 硬链接不能跨文件系统; 

         (3) 创建硬链接会增加inode引用计数;

      创建:

         ln  src  link_file


   符号链接指向一个文件路径的另一个文件路径;

      特性:

         (1) 符号链接与文件是两人个各自独立的文件,各有自己的inode;对原文件创建符号链接不会增加引用计数;

         (2) 支持对目录创建符号链接,可以跨文件系统;

         (3) 删除符号链接文件不影响原文件;但删除原文件,符号指定的路径即不存在,此时会变成无效链接;

      注意:符号链接文件的大小是其指定的文件的路径字符串的字节数;

      创建:

         ln -s  src link_file

         -v:verbose

   实例:

  #在/tmp下新建/etc/fstab的硬链接文件并查看:
[root@localhost ~]# lsblk 
NAME                MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0                  11:0    1   61M  0 rom  
sda                   8:0    0  120G  0 disk 
├─sda1                8:1    0  200M  0 part /boot
├─sda2                8:2    0   60G  0 part 
│ ├─vg0-root (dm-0) 253:0    0   20G  0 lvm  /
│ ├─vg0-swap (dm-1) 253:1    0    2G  0 lvm  [SWAP]
│ ├─vg0-usr (dm-2)  253:2    0   10G  0 lvm  /usr
│ └─vg0-var (dm-3)  253:3    0   20G  0 lvm  /var
├─sda3                8:3    0    5G  0 part 
├─sda4                8:4    0 31.5K  0 part 
└─sda5                8:5    0   10G  0 part /mnt/mydata
[root@localhost ~]# ls -l /etc/fstab 
-rw-r--r-- 1 root root 921 Mar 12 11:56 /etc/fstab
[root@localhost ~]# ln /etc/fstab /tmp/new.fstab
[root@localhost ~]# ls -l /etc/fstab /tmp/new.fstab 
-rw-r--r-- 2 root root 921 Mar 12 11:56 /etc/fstab
-rw-r--r-- 2 root root 921 Mar 12 11:56 /tmp/new.fsta
[root@localhost ~]# ln /etc/fstab /var/fstab.bak
ln: creating hard link `/var/fstab.bak' => `/etc/fstab': Invalid cross-device link
  #通过lsblk可以看到/etc目录和/tmp目录都没有单独分区,也就是说这两个目录都是直接在/目录所在的分区的,即在同一个磁盘分区内,创建硬链接成功,两文件出文件名外都一样,inode引用计数由原来的1变为2。而在单独分区的/var目录则无法创建硬链接,不在同一分区。

  #创建软链接(symbolic link)测试
[root@localhost ~]# ln -s /etc/fstab /tmp/fstab.symbolic-link
[root@localhost ~]# ln -s /etc/fstab /var/fstab.symbolic-link
[root@localhost ~]# ls -l /tmp/fstab.symbolic-link /var/fstab.symbolic-link 
lrwxrwxrwx 1 root root 10 Mar 12 20:25 /tmp/fstab.symbolic-link -> /etc/fstab
lrwxrwxrwx 1 root root 10 Mar 12 20:25 /var/fstab.symbolic-link -> /etc/fstab
  #甚至在centOS7版本上根目录下的许多目录都是软链接而已
[root@localhost ~]# ls -l /bin /lib /lib64 /sbin
lrwxrwxrwx. 1 root root 7 Mar  4 02:40 /bin -> usr/bin
lrwxrwxrwx. 1 root root 7 Mar  4 02:40 /lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Mar  4 02:40 /lib64 -> usr/lib64
lrwxrwxrwx. 1 root root 8 Mar  4 02:40 /sbin -> usr/sbin
[root@localhost ~]# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core)


文件系统管理工具:

   创建文件系统的工具

      mkfs

         mkfs.ext2, mkfs.ext3, mkfs.ext4, mkfs.xfs, mkfs.vfat, ...

   检测及修复文件系统的工具

      fsck

         fsck.ext2, fsck.ext3, ...

   查看其属性的工具

      dumpe2fs, tune2fs

   调整文件系统特性:

      tune2fs


内核级文件系统的组成部分:

   文件系统驱动:由内核提供

   文件系统�理工具:由用户空间的应用程序提供


ext系列文件系统的管理工具:

   mkfs.ext2, mkfs.ext3, mkfs.ext4

      mkfs -t ext2 = mkfs.ext2

   mke2fs

   ext系列文件系统专用管理工具

   mke2fs [OPTIONS]  device

      -t fs-type:指明要创建的文件系统类型

         mkfs.ext4 = mkfs -t ext4 = mke2fs -t ext4

      -b block-size:指明文件系统的块大小,有效值为1024/2048/4096

      -L new-volume-label:指明卷标;

      -j:创建有日志功能的文件系统ext3;

         mke2fs -j = mke2fs -t ext3 = mkfs -t ext3 = mkfs.ext3

      -i bytes-per-inode,指明inode与字节的比率;即每多少字节创建一个Indode; 

      -N number-of-inodes:直接指明要给此文件系统创建的inode的数量;

      -m reserved-blocks-percentage:指定预留的空间,百分比;默认5%


      -O [^]FEATURE:以指定的特性创建目标文件系统; 

   实例:

  #在/dev/sda磁盘中新建一个分区,并格式化为ext4类型,指明块大小为4K,卷标为MYDATA,预留空间为2%。
[root@localhost ~]# fdisk /dev/sda
...分区过程省略...
[root@localhost ~]# partx -a /dev/sda
BLKPG: Device or resource busy
error adding partition 1
BLKPG: Device or resource busy
error adding partition 2
BLKPG: Device or resource busy
error adding partition 3
BLKPG: Device or resource busy
error adding partition 4
BLKPG: Device or resource busy
error adding partition 5
[root@localhost ~]# cat /proc/partitions 
major minor  #blocks  name

   8        0  125829120 sda
   8        1     204800 sda1
   8        2   62914560 sda2
   8        3    5252256 sda3
   8        4         31 sda4
   8        5   10490413 sda5
 253        0   20971520 dm-0
 253        1    2097152 dm-1
 253        2   10485760 dm-2
 253        3   20971520 dm-3
[root@localhost ~]# mke2fs -b 4096 -L MYDATA -m 2 -t ext4 /dev/sda5
mke2fs 1.41.12 (17-May-2010)
Filesystem label=MYDATA
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655776 inodes, 2622603 blocks
52452 blocks (2.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2688548864
81 block groups
32768 blocks per group, 32768 fragments per group
8096 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.


   e2label

   Change the label on an ext2/ext3/ext4 filesystem

   e2label device [ new-label ]

   是设置或查看卷标的命令

   实例:

[root@localhost ~]# e2label /dev/sda5
MTDATA
[root@localhost ~]# e2label /dev/sda5 MYDATA
[root@localhost ~]# e2label /dev/sda5
MYDATA


   tune2fs

   adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems

   注意:块大小创建后不可修改。

   tune2fs [OPTIONS] device

      -l:查看超级块的内容

      -j:添加ext3的journal功能到文件系统,即改为ext3文件系统,但不会丢失数据

      -L volume-label:修改卷标

      -m reserved-blocks-percentage:调整预留空间

      -O [^]feature[,...]:开启或关闭某中特性

      -o [^]mount_options:开启或关闭某种默认挂载选项

         acl:开启acl

         ^acl:关闭acl

   dumpe2fs

      dump ext2/ext3/ext4 filesystem information

      显示ext系列文件系统属性信息

      -h:不输出块组信息

   实例:

  #重新格式化刚才分区格式为ext2,并挂载到/mnt/mydata,然后使用tune2fs修改文件系统类型为ext3,修改卷标为MYDATA,修改预留空间为2%,并设置挂载时默认禁用acl。
[root@localhost ~]# mkfs.ext2 /dev/sda5
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655776 inodes, 2622603 blocks
131130 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2688548864
81 block groups
32768 blocks per group, 32768 fragments per group
8096 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Writing inode tables: done                            
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 26 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@localhost ~]# blkid /dev/sda5
/dev/sda5: UUID="92a982f0-3cf6-4388-ad92-1a4d8836db01" TYPE="ext2" 
[root@localhost ~]# mount /dev/sda5 /mnt/mydata/
[root@localhost ~]# cp /var/log/messages /mnt/mydata/
[root@localhost ~]# ls /mnt/mydata/
lost+found  messages
[root@localhost ~]# tune2fs -j -L MYDATA -m 2 -o ^acl /dev/sda5
tune2fs 1.41.12 (17-May-2010)
Setting reserved blocks percentage to 2% (52452 blocks)
Creating journal inode: done
This filesystem will be automatically checked every 26 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@localhost ~]# mount -o remount /dev/sda5  /mnt/mydata 
[root@localhost ~]# blkid /dev/sda5
/dev/sda5: LABEL="MYDATA" UUID="92a982f0-3cf6-4388-ad92-1a4d8836db01" SEC_TYPE="ext2" TYPE="ext3" 
[root@localhost ~]# ls /mnt/mydata
lost+found  messages
[root@localhost ~]# cd /mnt/mydata/
[root@localhost mydata]# useradd fred
[root@localhost mydata]# getfacl messages 
# file: messages
# owner: root
# group: root
user::rw-
group::---
other::---

[root@localhost mydata]# setfacl -m u:fred:rwx messages 
setfacl: messages: Operation not supported


文件系统检测的工具:

   因进程意外中止或系统崩溃等 原因导致定稿操作非正常终止时,可能会造成文件损坏;此时,应该检测并修复文件系统; 建议,离线进行;

   ext系列文件系统:

      e2fsck

         check a Linux ext2/ext3/ext4 file system

         e2fsck [OPTIONS]  device

            -y:对所有问题自动回答为yes; 

            -f:即使文件系统处于clean状态,也要强制进行检测

   fsck

      check and repair a Linux file system

      -t fstype:指明文件系统类型;

         fsck -t ext4 = fsck.ext4

      -a:无须交互而自动修复所有错误;

      -r:交互式修复;


centOS6.x使用xfs文件系统:

   使用yum或其他方式安装上xfs文件系统管理软件即可

      yum -y install xfsprogs


blkid

   command-line utility to locate/print block device attributes

   blkid -L label | -U uuid:根据卷标或UID定位设备


(三)swap分区

   Linux上的交换分区必须使用独立的文件系统,且文件系统的System ID必须为82

   相关命令:

      mkswap

         创建swap分区

      swapon

         swapon  [OPTION]  [DEVICE]

         -a:启用定义在/etc/fstab文件中的所有swap设备;

      swapoff

         swapoff  [OPTION]  [DEVICE]

         -a:关闭定义在/etc/fstab文件中的所有swap设备;

   创建swap分区:

      分区并设置systemID为82 ---> mkswap格式化 ---> swapon [DEVICE]挂载并启用。

   实例:

  #新建一个4G分区,并挂载为swap,设置开机挂载
[root@localhost ~]# fdisk /dev/sda
...步骤省略,记得调整分区类型为82...
[root@localhost ~]# kpartx -af /dev/sda
device-mapper: reload ioctl on sda1 failed: Invalid argument
create/reload failed on sda1
device-mapper: reload ioctl on sda2 failed: Invalid argument
create/reload failed on sda2
device-mapper: reload ioctl on sda3 failed: Invalid argument
create/reload failed on sda3
device-mapper: reload ioctl on sda4 failed: Invalid argument
create/reload failed on sda4
device-mapper: reload ioctl on sda5 failed: Invalid argument
create/reload failed on sda5
device-mapper: reload ioctl on sda6 failed: Invalid argument
create/reload failed on sda6
device-mapper: reload ioctl on sda7 failed: Invalid argument
create/reload failed on sda7
device-mapper: reload ioctl on sda8 failed: Invalid argument
create/reload failed on sda8
[root@localhost ~]# cat /proc/partitions 
major minor  #blocks  name

   2        0          4 fd0
   8        0  125829120 sda
   8        1     512000 sda1
   8        2   41943040 sda2
   8        3   20971520 sda3
   8        4          1 sda4
   8        5    2098176 sda5
   8        6       1024 sda6
   8        7    5242880 sda7
   8        8    4194304 sda8
  11        0    1048575 sr0
[root@localhost ~]# mkswap /dev/sda8
mkswap: /dev/sda8: warning: wiping old swap signature.
Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=c9b73cc8-7371-4730-a39d-3ee08eff2a50
[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            977         148         623           6         205         647
Swap:          2048           0        2048
[root@localhost ~]# swapon /dev/sda8
[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            977         151         620           6         205         644
Swap:          6144           0        6144
	#在/etc/fstab添加如下内容:
UUID=c9b73cc8-7371-4730-a39d-3ee08eff2a50 swap                    swap    defaults        0 0


(四)文件系统挂载:

   根文件系统这外的其它文件系统要想能够被访问,都必须通过“关联”至根文件系统上的某个目录来实现,此关联操作即为“挂载”;此目录即为“挂载点”;

   挂载点:mount_point。用于作为另一个文件系统的访问入口;

      (1) 事先存在;

      (2) 应该使用未被或不会被其它进程使用到的目录;

      (3) 挂载点下原有的文件将会被隐藏;


   mount

      mount a filesystem

      mount [-nrw] [-t vfstype] [-o options] device dir

         -a, --all:挂载所有/dev/fsab文件中指定的文件系统

         -r, --read-only:只读挂载

         -w, --rw:读写挂载

         -n:默认情况下,设备挂载或卸载的操作会同步更新至/etc/mtab文件中;-n用于禁止此特性;

         -L label:用卷标指定设备名

         -U uuid:用UID指定设备名

         -t, --types vfstype:指定挂载格式

         -o, --options opts:指定挂载选项

            sync/async:同步/异步操作;

            atime/noatime:文件或目录在被访问时是否更新其访问时间戳;

            diratime/nodiratime:目录在被访问时是否更新其访问时间戳;

            remount:重新挂载; 

            acl:支持使用facl功能;

               # mount -o acl  device dir

               # tune2fs  -o  acl  device 

            ro:只读 

            rw:读写 

            dev/nodev:此设备上是否允许创建设备文件;

            exec/noexec:是否允许运行此设备上的程序文件;

            auto/noauto:

            user/nouser:是否允许普通用户挂载此文件系统;

            suid/nosuid:是否允许程序文件上的suid和sgid特殊权限生效;

            defaults:默认权限。

               包括rw, suid, dev, exec, auto, nouser, async, and relatime.

      查看所有挂载:

         (1)mount

         (2)cat /etc/mtab

         (3)cat /proc/mounts

      挂载光盘:

         mount -r dev/cdrom MOUNT_POINT

      挂载本地回环设备(iso,img)

         mount -o loop /LOOP_FILE MOUNT_POINT

   umount

      unmount file systems


   查看挂载点正在被谁占用:

      lsof MOUNT_POINT

      fuser -v MOUNT_POINT

   终止所有正在访问挂载点的进程

      fuser -km MOUNT_POINT


开机自动挂载:

   相关文件:/etc/fstab

   格式:每行定义一个挂载文件系统及相关属性

      挂载设备 挂载点 文件系统类型 挂载选项 转储频率 自检次序

      (1)挂载设备:

         可以是设备文件路径、LABEL=<label>、UUID=<uuid>、伪文件系统(如sysfs/proc/tmpfs等)

      (2)挂载点:

         swap的挂载点直接写“swap”即可

      (3)文件系统类型

      (4)挂载选项:

         多个选项以逗号分隔

      (5)转储频率:

         0:从不备份

         1:每天备份

         2:每隔一天备份

      (6)自检次序

         0:不自检

         1:首先自检,通常只有根文件设置为1

         2:次级自检

         ...


(五)文件系统、目录容量统计工具

   df

   report file system disk space usage

   df [OPTION]... [FILE]...

      -i, --inodes:显示inode使用情况

      -h, --human-readable

      --total:显示总结信息

      -l, --local:仅显示本地磁盘

      -t, --type=TYPE:仅显示指定文件系统类型的分区

      -T, --print-type:显示文件系统类型列

   du

   estimate file space usage

   du [OPTION]... [FILE]...

      -h, --human-readable

      -s, --summarize

      --max-depth=N



你可能感兴趣的:(文件,系统管理,磁盘管理)