Linux磁盘管理基础

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux磁盘管理基础相关的知识,希望对你有一定的参考价值。

Linux磁盘管理基础


  • 硬盘结构

  • 文件系统与MBR、GTP

  • 磁盘管理三步骤:分区、格式化、挂载

  • mount


硬盘结构

硬盘的基本组成材质是盘片,不同容量硬盘的盘片数不等。每个盘片有两面,都可记录信息。盘片表面上以盘片中心为圆心,不同半径的同心圆称为磁道,不同盘片相同半径的磁道所组成的圆柱称为柱面,每个磁道被分成许多扇形的区域,每个区域叫一个扇区,每个扇区可存储128×2^N 次方(N=0.1.2.3)字节信息。在DOS中每扇区是128×2^2 次方=512字节。

技术分享

硬盘存储相关术语:CHS

head:磁头 2^8=256track:磁道 2^10=1024, 每个磁道有63个扇区,
cylinder: 柱面 柱面数=2^10   柱面容量=512*63*256=8M
secotr: 扇区,512bytes 2^6-1=63硬盘容量:512*63*1024*256=8G

技术分享

硬盘数据结构

每个磁盘有两个面,每个面都有一个磁头,习惯用磁头号来区分,扇区,磁道(或柱面)和磁头数构成了硬盘结构的基本参数。基计算公式为:

硬盘容量=盘面数×柱面数×扇区数×512字节

“簇”是硬盘上存储数据进行分配的最小单位,不同容量的硬盘,簇的大小也不一样,簇的概念仅适用于数据区。

注意:扇区的编号是从1开始,而不是从0开始。

硬盘的第一个扇区(0道0头1扇区)被保留为主引导扇区。在主引导区内主要有两项内容:主引导记录MBR(Main Boot Record)和分区表DPT(Disk Partition Table,主引导记录是一段程序代码,其作用主要是对硬盘上安装的操作系统进行引导;硬盘分区表则存储了硬盘的分区信息。计算机启动时将读取该扇区的数据,并对其合法性进行判断(扇区最后两个字节是否为0x55AA或0xAA55 )。

格式化好的硬盘,整个磁盘按所记录数据的作用不同可分为五部分:主引导记录(MBR:Main Boot Record),操作系统引导记录(OBR: OS Boot Record),文件分配表(FAT:File Assign Table),根目录(DIR: Directory)和数据区(DATA)。前5个重要信息在磁盘的外磁道上。

数据存储原理

  1. 文件的读取 操作系统从目录区中读取文件信息(包括文件名、后缀名、文件大小、修改日期和文件在数据区保存的第一个簇的簇号)

  2. 文件的写入 当我们要保存文件时,操作系统首先在DIR区中找到空区写入文件名、大小和创建时间等相应信息,然后在Data区找到闲置空间将文件保存,并将Data区的第一个簇写入DIR区。

  3. 文件的删除 文件删除工作就是删除文件的索引节点。

Fdisk和Format的一点小说明

和文件的删除类似,利用Fdisk删除再建立分区和利用Format格式化逻辑磁盘(假设你格式化的时候并没有使用/U这个无条件格式化参数)都没有将数据从DATA区直接删除,前者只是改变了分区表,后者只是修改了FAT表,因此被误删除的分区和误格式化的硬盘完全有可能恢复……

关于硬盘,分区是不得不提到的一个概念,分区可以实现:

优化I/O性能
实现磁盘空间配额限制
提高修复速度
隔离系统和程序
安装多个OS
采用不同文件系统

文件系统与MBR、GPT

文件系统

Linux 文件系统是一个树形结构,以 / 目录作为根目录,目录也包含其他目录,即子目录。我们的硬盘,在Linux上也是一个文件,叫做块设备文件,而每一个块设备上通过都会有一个文件系统,我们通过挂载这个动作找到一个挂载点,以挂载点的方式将文件系统挂载到不同的设备上,从而创建文件系统的树状结构。

通常情况下,内核通过将某些硬盘驱动器分区上的文件系统以 / 的形式挂载来启动这个挂载过程。当然也可以挂载到其它硬盘驱动器分区,如 /boot、/tmp 或 /home。

接下来我们再看下 Filesystem Hierarchy Standard

目录说明
bin基本命令二进制文件
boot引导加载器的静态文件
dev设备文件
etc特定于主机的系统配置
lib基本共享库和内核模块
media可插拔介质的挂载点
mnt临时挂载文件系统的挂载点
opt附加应用软件包
sbin基本系统二进制文件
srv提供服务的数据
tpm临时文件
usr次要层级结构
var变量数据

MBR

MBR,即MBR,全称为Master Boot Record,即硬盘的主引导记录,在驱动器最前端的一段引导扇区。MBR分区表的最大可寻址的存储空间只有2Tb(2^ 32×512字节)。为了便于理解,一般将MBR分为广义和狭义两种:广义的MBR包含整个扇区(引导程序、分区表及分隔标识),也就是上面所说的主引导记录;而狭义的MBR仅指引导程序而言。硬盘的0柱面、0磁头、1扇区称为主引导扇区(也叫主引导记录MBR)。它由三个部分组成,主引导程序、硬盘分区表DPT(Disk Partition table)和分区有效标志。在总共512字节的主引导扇区里主引导程序(boot loader)占446个字节,第二部分是Partition table区(分区表),即DPT,占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中。第三部分是magic number,占2个字节,固定为0xAA55或0x55AA,这取决于处理器类型 ,如果是小端模式处理器(如Intel系列),则该值为0xAA55;如果是大端模式处理器 (如Motorola6800),则该值为0x55AA。

注意:MBR是不属于任何一个操作系统,也不能用操作系统提供的磁盘操作命令来读取它,但可以通过命令来修改和重写。

虚拟MBR:即 EBR (extent boot record)扩展引导记录,其记录表项 与MBR相同 ,用于管理扩展分区上的逻辑驱动器。

技术分享

MBR小结:

MBR: Master Boot Record,1982年,使用32位表示扇区数,分区不超过2T
如何分区:按柱面0磁道1扇区:512bytes446bytes: boot loader64bytes:分区表16bytes: 标识一个分区2bytes: 55AA4个主分区;3主分区+1扩展(N个逻辑分区)

GPT

GUID磁碟分割表(GUID Partition Table,缩写:GPT)其含义为“全局唯一标识磁盘分区表”,是一个实体硬盘的分区表的结构布局的标准。它是可扩展固件接口(EFI)标准(被Intel用于替代个人计算机的Bios)的一部分,被用于替代BIOS系统中的一32bits来存储逻辑块地址和大小信息的主开机纪录(MBR)分区表。

在MBR硬盘中,分区信息直接存储于主引导记录(MBR)中(主引导记录中还存储着系统的引导程序)。但在GPT硬盘中,分区表的位置信息储存在GPT头中。但出于兼容性考虑,硬盘的第一个扇区仍然用作MBR,之后才是GPT头。

为了减少分区表损坏的风险,GPT在硬盘最后保存了一份分区表的副本。

分区表头定义了硬盘的可用空间以及组成分区表的项的大小和数量。分区表头还记录了这块硬盘的GUID,记录了分区表头本身的位置和大小(位置总是在LBA 1)以及备份分区表头和分区表的位置和大小(在硬盘的最后)。它还储存着它本身和分区表的CRC32校验。主分区表和备份分区表的头分别位于硬盘的第二个扇区(LBA 1)以及硬盘的最后一个扇区。备份分区表头中的信息是关于备份分区表的。

GPT小结: GPT:GUID(Globals Unique Identifiers)partition table 支持128个分区,使用64位,支持8Z(512Byte/block )64Z (4096Byte/block) 使用128位UUID 表示磁盘和分区GPT分区表自动备份在头和尾两份,并有CRC校验位 UEFI (统一扩展固件接口)硬件支持GPT,使操作系统启动

技术分享

磁盘管理三步骤:分区、格式化、挂载

磁盘管理涉及到的基本命令:

查询类:
lsblk, blkid, e2label, findfs, dumpe2fs
free, df, du

分区类:
fdisk, gdisk, partprobe, parted

格式化类(创建文件系统)
mkfs, mkfs.ext4, mkfs.xfs, mkfs.vfat --- mke2fs

挂载类:
mount, findmnt, fuser, umount, 

编辑类:
tune2fs,e2label

修复类:
fsck, e2fsck, dd
  • 磁盘查询

lsblk: 列出块设备

[[email protected] ~]#lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  200G  0 disk 
├─sda1   8:1    0  200M  0 part /boot
├─sda2   8:2    0 97.7G  0 part /
├─sda3   8:3    0 19.5G  0 part /testdir
├─sda4   8:4    0    1K  0 part 
└─sda5   8:5    0    4G  0 part [SWAP]
sdb      8:16   0   20G  0 disk 
└─sdb1   8:17   0   20G  0 part 
sr0     11:0    1  3.7G  0 rom  /media/CentOS_6.8_Final
[[email protected] ~]#[[email protected] ~]#lsblk -m   # 显示权限信息
NAME    SIZE OWNER GROUP MODE
sda     200G root  disk  brw-rw----
├─sda1  200M root  disk  brw-rw----
├─sda2 97.7G root  disk  brw-rw----
├─sda3 19.5G root  disk  brw-rw----
├─sda4    1K root  disk  brw-rw----
└─sda5    4G root  disk  brw-rw----
sdb      20G root  disk  brw-rw----
└─sdb1   20G root  disk  brw-rw----
sr0     3.7G root  cdrom brw-rw----
[[email protected] ~]#[[email protected] ~]#lsblk -b /dev/sda   # 以bytes方式显示设备大小 
NAME   MAJ:MIN RM         SIZE RO TYPE MOUNTPOINT
sda      8:0    0 214748364800  0 disk 
├─sda1   8:1    0    209715200  0 part /boot
├─sda2   8:2    0 104857600000  0 part /
├─sda3   8:3    0  20971520000  0 part /testdir
├─sda4   8:4    0         1024  0 part 
└─sda5   8:5    0   4294967296  0 part [SWAP]
[[email protected] ~]#

blkid: 块设备属性信息查看

-U UUID: 根据指定的UUID来查找对应的设备
-L LABEL:根据指定的LABEL来查找对应的设备
[[email protected] ~]#blkid
/dev/sda2: UUID="baf588f0-3f89-4bb1-b01a-1b4ec3549536" TYPE="ext4" 
/dev/sda1: UUID="d27f504c-d54b-46d5-8dc3-b5ff7dca9000" TYPE="ext4" 
/dev/sda3: UUID="7778401f-6a06-4dc8-a3b9-8a6a972af2ed" TYPE="ext4" 
/dev/sda5: UUID="a3833009-be7e-4c0d-af4f-ed8045ce1652" TYPE="swap" 
/dev/sdb1: UUID="78281d98-04ec-4b62-82f5-518f80cb3a75" TYPE="ext4" 
[[email protected] ~]#

[[email protected] ~]#blkid -s TYPE  # 显示所有设备文件系统 
/dev/sda2: TYPE="ext4" 
/dev/sda1: TYPE="ext4" 
/dev/sda3: TYPE="ext4" 
/dev/sda5: TYPE="swap" 
/dev/sdb1: TYPE="ext4"

findfs: 查找分区

findfs - Find a filesystem by label or UUID
findfs[options] LABEL=<label>
findfs[options] UUID=<uuid>
[[email protected] ~]#findfs UUID=baf588f0-3f89-4bb1-b01a-1b4ec3549536  # UUDI可通过blkid查看或直接查看
/etc/fstab/dev/sda2
[[email protected] ~]#

**dumpe2fs: 查看超级块信息

[[email protected] ~]#dumpe2fs /dev/sda1

技术分享

技术分享

free: 内存空间使用状态

free - Display amount of free and used memory in the systemfree [OPTION]
-m: 以MB为单位
-g: 以GB为单位
[[email protected] ~]#free
             total       used       free     shared    buffers     cached
Mem:       1907300     627884    1279416       2208      27832     286968
-/+ buffers/cache:     313084    1594216
Swap:      4194300          0    4194300
[[email protected] ~]#free -m 
             total       used       free     shared    buffers     cached
Mem:          1862        613       1249          2         27        280
-/+ buffers/cache:        305       1556
Swap:         4095          0       4095
[[email protected] ~]#free -h 
             total       used       free     shared    buffers     cached
Mem:          1.8G       612M       1.2G       2.2M        27M       280M
-/+ buffers/cache:       305M       1.5G
Swap:         4.0G         0B       4.0G
[[email protected] ~]#

df: 文件系统空间占用等信息的查看工具

df - report file system disk space usage
df [OPTION]... [FILE]...

-H 以1000为单位
-T 文件系统类型
-h: human-readable
-i:inodesinstead of blocks
-P: 以Posix兼容的格式输出
[[email protected] ~]#df -h
[[email protected] ~]#df -H

技术分享

[[email protected] ~]#df -i[[email protected] ~]#df -T

技术分享

du: 查看某目录总体空间占用状态

du [OPTION]... DIR
-h: human-readable
-s: summary
[[email protected] ~]#du -h Music
/4.0K    Music/
[[email protected] ~]#du -s Music
/4       Music/
  • 磁盘分区

fdisk

fdisk - Partition table manipulator for Linux

fdisk -l [-u] [device...]
子命令:    
    p 分区列表
    t 更改分区类型
    n 创建新分区
    d 删除分区
    w 保存并退出    
    q 不保存并退出

添加一块新硬盘:

[[email protected] ~]#echo "- - -" > /sys/class/scsi_host/host2/scan  # 让系统扫描硬盘

技术分享

以柱面为单位:
[[email protected] ~]#fdisk -l /dev/sda
以兼容的方式显示:(compatible)
[[email protected] ~]#fdisk -lc /dev/sda
以扇区为单位:
[[email protected] ~]#fdisk -lcu /dev/sda

技术分享

技术分享

用fdisk给sdc划分一个主分区,一个扩展分区,一个逻辑分区:

[[email protected] ~]#fdisk /dev/sdc
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x76fc3350.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won‘t be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

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‘).

Command (m for help): n         # 创建一个新分区 
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-2610, default 1): 
Using default value 1Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +5G
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
e
Partition number (1-4): 4    
First cylinder (655-2610, default 655): 
Using default value 655Last cylinder, +cylinders or +size{K,M,G} (655-2610, default 2610): +3G
Command (m for help): n
Command action
   l   logical (5 or over)   
   p   primary partition (1-4)
l
First cylinder (655-1047, default 655): 
Using default value 655Last cylinder, +cylinders or +size{K,M,G} (655-1047, default 1047): +3G
Command (m for help): p    # 查看当前分区

Disk /dev/sdc: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x76fc3350

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1         654     5253223+  83  Linux
/dev/sdc4             655        1047     3156772+   5  Extended
/dev/sdc5             655        1047     3156741   83  Linux

Command (m for help): w  保存并退出 
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[[email protected] ~]#

查看内核是否已经识别新的分区:

[[email protected] ~]#cat /proc/partitions

技术分享

如果未识别出,可同步分区表,即通知内核重新读取硬盘分区表。

同步分区表:
CentOS 6
    partx-a /dev/DEVICE
    partx-d -n M:N /dev/DEVICE
CentOS 5 7 
    partprobe[/dev/DEVICE]

gdisk: 类fdisk 的GPT分区工具

gdisk - Interactive GUID partition table (GPT) manipulator

注意:gdisk没有扩展分区逻辑分区的概述。

关于gfisk, 此处选择在Cent OS 7环境:

[[email protected] ~]#gdisk /dev/sde
GPT fdisk (gdisk) version 0.8.6

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries.

Command (? for help): n
Partition number (1-128, default 1): 
First sector (34-41943006, default = 2048) or {+-}size{KMGTP}: 
Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}: +5G
Current type is ‘Linux filesystem
‘Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to ‘Linux filesystem‘

Command (? for help): p
Disk /dev/sde: 41943040 sectors, 20.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): FF896BB7-557D-4230-8682-67E987F19722
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 31457213 sectors (15.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048        10487807   5.0 GiB     8300  Linux filesystem

Command (? for help): n
Partition number (2-128, default 2): 
First sector (34-41943006, default = 10487808) or {+-}size{KMGTP}: 
Last sector (10487808-41943006, default = 41943006) or {+-}size{KMGTP}: +10G
Current type is ‘Linux filesystem‘Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to ‘Linux filesystem‘

Command (? for help): p
Disk /dev/sde: 41943040 sectors, 20.0 GiB
Logical sector size: 512 bytes
heDisk identifier (GUID): FF896BB7-557D-4230-8682-67E987F19722
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 10485693 sectors (5.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048        10487807   5.0 GiB     8300  Linux filesystem   
   2        10487808        31459327   10.0 GiB    8300  Linux filesystem

Command (? for help): w   

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTINGPARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sde.
The operation has completed successfully.
[[email protected] ~]#

技术分享

查看内核是否已经同步分区表:

[[email protected] ~]#cat /proc/partitions |grep sde
   8       64   20971520 sde   
   8       65    5242880 sde1   
   8       66   10485760 sde2
[[email protected] ~]#

parted:GNU组织开发的一款强大实时磁盘分区工具

parted - a partition manipulation program
parted [options] [device [command [options...]...]]

parted命令可以处理最常见的分区格式,包括:ext2、ext3、fat16、fat32、NTFS、ReiserFS、JFS、XFS、UFS、HFS以及Linux交换分区。

使用示例

parted /dev/sdbmklabelgpt|msdos
parted /dev/sdbprint
parted /dev/sdbmkpartprimary 1 200 (默认M)
parted /dev/sdbrm1
parted -l
[[email protected] ~]#parted /dev/sdb
GNU Parted 3.1
Using /dev/sdb
Welcome to GNU Parted! Type ‘help‘ to view a list of commands.
(parted) mklabel gpt                                                      
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost.
Do you want to continue?
Yes/No? y                                                                 
(parted) mkpart primary 1 20480   # 默认单位为M
(parted) mkpart primary 20480 60000  # 最好连续写,不连续会提示你并自给给你连续
(parted) mkpart primary 60000 100000                                      
(parted) print                                                            
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 215GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags 
1      1049kB  20.5GB  20.5GB  ext4         primary 
2      20.5GB  60.0GB  39.5GB               primary 
3      60.0GB  100GB   40.0GB               primary

(parted) rm 2                                                             
(parted) p                                                                
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 215GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags 
1      1049kB  20.5GB  20.5GB  ext4         primary 
3      60.0GB  100GB   40.0GB               primary
(parted) q                                                                
Information: You may need to update /etc/fstab.
[[email protected] ~]#

parted的操作都是实时生效的,小心使用!

技术分享

  • 创建文件系统与编辑元数据

文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。

从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等。

文件系统类型Linux文件系统: 
ext2(Extended file system), ext3, ext4, xfs(SGI), btrfs(Oracle), reiserfs, jfs(AIX), swap
光盘:iso9660
Windows:fat32, ntfs
Unix: FFS(fast), UFS(unix), JFS2
网络文件系统:NFS, CIFS
集群文件系统:GFS2, OCFS2(oracle)
分布式文件系统:ceph, moosefs, mogilefs, glusterfs, Lustre
RAW:未经处理或者未经格式化产生的文件系统

文件系统分类
根据其是否支持"journal"功能:
日志型文件系统: ext3, ext4, xfs, ...
非日志型文件系统: ext2, vfat

文件系统的组成部分:
内核中的模块:ext4, xfs, vfat
用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat
Linux的虚拟文件系统:VFS
查前支持的文件系统:cat /proc/filesystems

那么,为何Linux能够支持如此众多的文件系统呢?这是因为VFS(Virtual Filesystem Switch),其作用就是采用标准的Unix系统调用读写位于不同物理介质上的不同文件系统,即为各类文件系统提供了一个统一的操作界面和应用编程接口。VFS是一个可以让open()、read()、write()等系统调用不用关心底层的存储介质和文件系统类型就可以工作的粘合层。而Linux文件系统对外的接口,任何要使用文件系统的程序都必须经由这层接口来使用它。

每一种类型的文件系统代码都隐藏了实现的细节。因此,对于VFS层和内核的其它部分而言,每一种类型的文件系统看起来都是一样的。

技术分享

接着来看我们的命令:

mke2fs是ext系统文件系统专用管理工具,mkfs则可以调用相关的程序来创建文件系统,如etx系列, xfs, btrfs, vfat,但其本身并不执行建立文件系统的工作,而是去调用相关程序;mkfs与mke2fs功能强大,还可以管理inode, 如为数据空间创建多个个inode, 一个inode指向数据空间的多少字节,还可以开启或禁用某些文件系统的特性,如日志功能等。

mke2fs命令小结:

mke2fs:ext系列文件系统专用管理工具
-t {ext2|ext3|ext4}-b {1024|2048|4096}  # 指定数据块的大小 
-j: 相当于-t ext3mkfs.ext3 = mkfs-t ext3 = mke2fs -j = mke2fs -t ext3
-i #: 为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小
-N #:为数据空间创建个多少个inode-I 一个inode记录大小128---4096   # 指定节点记录的大小 
-m #: 默认5%,为管理人员预留空间占总空间的百分比
-O FEATURE[,...]:启用指定特性
-O ^FEATURE:关闭指定特性

其中-b 用来指定数据块的大小,-I 用来指定节点记录的大小,超级块与inode tabel 的关系也下图所示:

技术分享

mkfs命令小结:

mkfs命令:
(1) # mkfs.FS_TYPE/dev/DEVICEext4
xfs
btrfs
vfat
(2) # mkfs-t FS_TYPE /dev/DEVICE-L ‘LABEL‘: 设定卷标

注意:mkfs命令也可以修改元数据,譬如块大小与inode,即mke2fs的功能选项mkfs命令通常也通用!

查看与编辑元数据:tune2fs, dumpe2fs

tune2fs:重新设定ext系列文件系统可调整参数的值
-l:查看指定文件系统超级块信息;super block
-L ‘LABEL‘:修改卷标-m #:修预留给管理员的空间百分比
-j: 将ext2升级为ext3
-O: 文件系统属性启用或禁用,–O ^has_journal
-o: 调整文件系统的默认挂载选项,–o ^acl
-U UUID: 修改UUID号

dumpe2fs:
-h:查看超级块信息(分组信息),分区用分组管理

使用示例

[[email protected] ~]#mkfs.ext4 /dev/sdb1
[[email protected] ~]#mke2fs -j /dev/sdb3   # mkfs.ext3 = mkfs-t ext3 = mke2fs -j = mke2fs -t ext3
[[email protected] ~]#blkid /dev/sdb1
/dev/sdb1: UUID="71b05248-a5a7-4532-bd41-67d7b062e8e5" TYPE="ext4" 
PARTLABEL="primary" PARTUUID="0020ea01-ab53-487a-ad09-01c075383e74" 
[[email protected] ~]# 
[[email protected] ~]#blkid /dev/sdb3    
/dev/sdb3: UUID="e67d9e57-7d62-417d-a43f-e57c6e3c45f8" SEC_TYPE="ext2" TYPE="ext3" 
PARTLABEL="primary" PARTUUID="aaf54c4d-595b-4e6a-9657-ab0eb4b91c61" 
[[email protected] ~]#

技术分享

[[email protected] ~]#tune2fs -l /dev/sdb1  查看sdb1的超级块信息

技术分享

技术分享

技术分享

其中,Reserved block count:是指保留的块,其是预留给管理员与管理员组的!

Reserved block count
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
[[email protected] ~]#mkfs.ext4 -I 256 /dev/sdb1  # 创建文件系统时指定inode大小

技术分享

[[email protected] ~]#mkfs.ext4 -N 512000 /dev/sdb1 # 创建文件系统时指定inode数量

技术分享

[[email protected] ~]#mkfs.ext4 -i 10240 /dev/sdb1 
# 创建文件系统时指定一个inode所消耗的数据块大小, 此值越大,inode计数越小,即inode所占用的空间越小。

[[email protected] ~]#mkfs.ext4 -m 1 /dev/sdb1  
# 创建文件系统时指定预留空间占总空间的百分比,此处为1%.

技术分享

当然,好些元数据信息在创建好文件系统之后也可以利用tune2fs来调整:

[[email protected] ~]#tune2fs -m 1 /dev/sdc1  # 调整预留空间占比
tune2fs 1.42.9 (28-Dec-2013)
Setting reserved blocks percentage to 1% (7864 blocks)
[[email protected] ~]#
[[email protected] ~]#tune2fs -m 0 /dev/sdc1
tune2fs 1.42.9 (28-Dec-2013)
Setting reserved blocks percentage to 0% (0 blocks)
[[email protected] ~]#
[[email protected] ~]#mke2fs -L /mnt/sdb1 /dev/sdb1 # 创建文件系统时指定卷标,建议卷标为挂载点

技术分享

  • 磁盘的挂载与修复

关于挂载:

挂载:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为

把设备关联挂载点:mount Point,挂载点下原有文件在挂载完成后会被临时隐藏,挂载点目录一般为空

卸载时:为解除此关联关系的过程,可使用设备,也可以使用挂载点

我们用卷标的管理来引入挂载,e2label:

e2label - Change the label on an ext2/ext3/ext4 filesystem
e2label device [ new-label ]
[[email protected] ~]#e2label /dev/sdb1/mnt/sdb1
[[email protected] ~]#
[[email protected] ~]#e2label /dev/sdb1 /mnt/liansir
[[email protected] ~]#tune2fs -l /dev/sdb1
tune2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   /mnt/liansir
[[email protected] ~]#blkid /dev/sdb1
/dev/sdb1: LABEL="/mnt/liansir" UUID="14167f80-eedd-4770-8bbe-000d2e073e19" TYPE="ext2" 
PARTLABEL="primary" PARTUUID="0020ea01-ab53-487a-ad09-01c075383e74"
[[email protected] ~]#tune2fs -j /dev/sdb1  # 将ext2升级为ext3
tune2fs 1.42.9 (28-Dec-2013)
Creating journal inode: done
[[email protected] ~]#blkid /dev/sdb1     
/dev/sdb1: LABEL="/mnt/liansir" UUID="14167f80-eedd-4770-8bbe-000d2e073e19" SEC_TYPE="ext2" TYPE="ext3" 
PARTLABEL="primary" PARTUUID="0020ea01-ab53-487a-ad09-01c075383e74" 
[[email protected] ~]#

技术分享

而CentOS 6默认挂载选项与什么时候创建文件系统相关:

技术分享

技术分享

于是,如果将sdb1挂载到某一挂载点,并创建一个文件,在给此文件设置acl功能时却提示不支持此操作:

[[email protected] ~]#mkdir /mnt/sdb1
[[email protected] ~]#mount /dev/sdb1 /mnt/sdb1
[[email protected] ~]#cd /mnt/sdb1
[[email protected] /mnt/sdb1]#touch f1
[[email protected] /mnt/sdb1]#setfacl -m u:liansir:rw 
f1setfacl: f1: Operation not supported
[[email protected] /mnt/sdb1]#

小结:centos 6 手动分区格式化ext,默认没有acl功能,而centos 7默认就有。

[[email protected] ~]#tune2fs -o acl /dev/sdb1  # 开启文件系统的alc特性
tune2fs 1.41.12 (17-May-2010)
[[email protected] ~]#
[[email protected] ~]#umount /mnt/sdb1   # 先卸载
[[email protected] ~]#mount /dev/sdb1 /mnt/sdb1
[[email protected] ~]#cd /mnt/sdb1
[[email protected] /mnt/sdb1]#setfacl -m u:liansir:rw f1
[[email protected] /mnt/sdb1]#ll 
f1-rw-rw-r--+ 1 root root 0 Aug 28 11:29 f1
[[email protected] /mnt/sdb1]#
[[email protected] /mnt/sdb1]#tune2fs -o ^acl /dev/sdb1  # 禁用文件系统的acl特性        
tune2fs 1.41.12 (17-May-2010)
[[email protected] /mnt/sdb1]#

破坏与修复超级块信息:

[[email protected] ~]#dd if=/dev/zero of=/dev/sdb1 bs=1M count=10  # 破坏
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.0640596 s, 164 MB/s
[[email protected] ~]#dumpe2fs /dev/sdb1  # 查看
dumpe2fs 1.41.12 (17-May-2010)dumpe2fs: Bad magic number in super-block while trying to open /dev/sdb1
Couldn‘t find valid filesystem superblock.
[[email protected] ~]#
[[email protected] ~]#fsck -y /dev/sdb1  # 修复时如果不指定文件系统类型则会自动识别
fsck from util-linux-ng 2.17.2
e2fsck 1.41.12 (17-May-2010)fsck.ext2: Superblock invalid, trying backup blocks...
Superblock has an invalid journal (inode 8).
Clear? yes
[[email protected] ~]#tune2fs -l /dev/sdb1  # 查看文件系统状态是否为clean
tune2fs 1.41.12 (17-May-2010)
Filesystem volume name:   <none>
Last mounted on:          /mnt/sdb1
Filesystem UUID:          7ba2398a-3ac0-4db9-901e-d4d0987aaabc
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    (none)
Filesystem state:         clean

至此,我们需要详细了解下mount与dd这两个命令的用法:

挂载方法:mount DEVICE MOUNT_POINT
mount:通过查看/etc/mtab文件显示当前已挂载的所有设备
mount [-fnrsvw] [-t vfstype] [-o options] device dir
device:指明要挂载的设备;
(1) 设备文件:例如/dev/sda5
(2) 卷标:-L ‘LABEL‘, 例如-L ‘MYDATA‘
(3) UUID, -U ‘UUID‘:例如-U ‘0c50523c-43f1-45e7-85c0-a126711d406e‘
(4) 伪文件系统名称:proc, sysfs, devtmpfs, configfs
dir:挂载点
事先存在;建议使用空目录
进程正在使用中的设备无法被卸载

mount命令常用选项

  1. -t vsftype: 指定要挂载的设备上的文件系统类型

  2. -r: readonly,只读挂载

  3. -w: read and write, 读写挂载

  4. -n: 不更新/etc/mtab,相当于#mount

  5. -a: 自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能)

  6. -L ‘LABEL‘: 以卷标指定挂载设备

  7. -U ‘UUID‘: 以UUID指定要挂载的设备

  8. -B,--bind: 绑定目录到另一个目录上

查看内核追踪到的已挂载的所有设备: cat /proc/mounts

另外,mount还有一个强大的-o选项集:-o options:(挂载文件系统的选项),多个选项使用逗号分隔

  1. async: 异步模式

  2. sync: 同步模式,内存更改时,同时写磁盘

  3. atime/noatime: 包含目录和文件

  4. diratime/nodiratime: 目录的访问时间戳

  5. auto/noauto: 是否支持自动挂载,是否支持-a选项

  6. exec/noexec: 是否支持将文件系统上运行应用程序

  7. dev/nodev: 是否支持在此文件系统上使用设备文件

  8. suid/nosuid: 不否支持suid和sgid权限 9 remount: 重新挂载

  9. ro: 只读

  10. rw: 读写

  11. user/nouser: 是否允许普通用户挂载此设备,默认管理员才能挂载

  12. acl: 启用此文件系统上的acl功能

  13. Defaults: 相当于rw, nosuid, dev, exec, auto, nouser, async

还有以下常用配合命令:

查看挂载情况:
findmnt MOUNT_POINT

查看正在访问指定文件系统的进程:
lsof MOUNT_POINT
fuser -v MOUNT_POINT

终止所有在正访问指定的文件系统的进程:
fuser -km MOUNT_POINT  # 注意别干掉根的进程,否则只能重启,fuser -km / 卸载:
umount DEVICE
umount MOUNT_POINT

mount的挂载动作在系统重启后失效,要想永久生效,则要写入其配置文件:/etc/fstab

/etc/fstab: 每行定义一个要挂载的文件系统

技术分享

止战

2016.8.29


本文出自 “止战-连Sir” 博客,请务必保留此出处http://liansir.blog.51cto.com/9372908/1844921

以上是关于Linux磁盘管理基础的主要内容,如果未能解决你的问题,请参考以下文章

Linux基础:文件系统操作与磁盘管理

Linux磁盘管理基础

Linux磁盘管理基础学习

Linux 磁盘管理基础

Linux基础-18day-Linux系统磁盘管理

Linux基础管理——磁盘管理