马哥培训第五周笔记 磁盘存储和文件系统(/home目录迁移)

磁盘存储和文件系统

知识准备——设备文件

通过前面的学习我们已经知道linux系统中一切皆文件,也了解了linux文件系统中使用ls-l命令时,可以通过每一行的第一个字符来判断该文件的文件类型,除了常见的-表示普通文件、d表示文件夹、l表示的软连接,还提到了两种文件,c开头的字符文件和b开头的块文件,这两种文件称为设备文件,c开头的字符文件存的是字符,比如前面接触过的/dev/zero和/dev/null就是字符文件,而我们的硬盘就属于块设备,系统读取字符文件时是一个字符一个字符的读取,比如/dev/zero就代表0字符,而块设备在读取时是作为一个整体读取,典型的就是硬盘,

块设备:block,存取单位“块”,磁盘

字符设备:char,存取单位“字符”,键盘

设备文件作为特殊的文件,在使用ls -l查看时,其输出的内容与普通文件的内容有一点区别:

[root@Centos6 ~ 05:44:06]#ll /dev/zero /dev/null /dev/sda*

crw-rw-rw- 1 root root 1, 3 Apr 27 20:06 /dev/null

brw-rw—- 1 root disk 8, 0 Apr 27 20:06 /dev/sda

brw-rw—- 1 root disk 8, 1 Apr 27 20:06 /dev/sda1

brw-rw—- 1 root disk 8, 2 Apr 27 20:06 /dev/sda2

brw-rw—- 1 root disk 8, 3 Apr 27 20:06 /dev/sda3

brw-rw—- 1 root disk 8, 4 Apr 27 20:06 /dev/sda4

brw-rw—- 1 root disk 8, 5 Apr 27 20:06 /dev/sda5

brw-rw—- 1 root disk 8, 6 Apr 27 20:06 /dev/sda6

crw-rw-rw- 1 root root 1, 5 Apr 27 20:06 /dev/zero

对比下面普通文件显示的信息

[root@Centos6 ~ 05:44:14]#ll f1

-rw-r–r–. 1 root root 525 Apr 18 22:20 f1

可以看到,在普通文件放置文件大小信息的位置,被使用逗号隔开的两个数字所取代,这两个数字被称为设备号,设备号的作用是更精确的标明了设备类型以及设备本身属于该类设备下的第几个设备,以便系统进行识别:

主设备号:逗号前面的数字,表明了设备类型。

次设备号:逗号后面的数字,标明了该设备是前面标明的设备类型下的第几个设备。

当系统识别到具体的设备类型后,就可以将该设备文件关联至一个设备驱动程序,从而能够跟与之对应的硬件设备进行通讯。

前面在学习cp命令时,提到过复制特殊文件时,需要使用cp -a来复制,否则复制的就并非设备文件本身,而是设备文件里的内容,现在,知道了设备号的意义,也可以使用mknod命令来创建设备文件。

mknod 该命令用于创建设备文件

语法:mknod 文件名 设备类型符号 主设备号 次设备号

设备类型符号即ls -l看到的每行第一个字符

机械硬盘的基本结构简述

机械硬盘(HDD):Hard Disk Drive,即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电机,磁头控制器,数据转换器,接口,缓存等几个部分组成。机械硬盘中所有的盘片都装在一个旋转轴上,每张盘片之间是平行的,在每个盘片的上下两个存储面都对应有一个磁头,磁头与盘片之间的距离极小,所有的磁头联在一个磁头控制器上,由磁头控制器负责磁头的运动。磁头可沿盘片的半径方向运动,加上盘片每分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置上进行数据的读写操作,要注意的是,所有的磁头都是同步运动的,所有的盘片也是同步旋转的。数据可通过磁头由电磁流来改变极性方式被电磁流写到磁盘上,也可通过相反方式对存入的数据进行读取。硬盘为精密设备,进入硬盘的空气必须过滤,在HDD硬盘上还有一块过滤片用于过滤空气,当然也是几乎无法进行拆卸的,因为接触到空气,盘片也就无法再读取了,空气中的灰尘足以划伤盘片。 

固态硬盘(SSD):Solid State Drive,用固态电子存储芯片阵列而制成的硬盘,由控制单元和 存储单元(FLASH芯片、DRAM芯片)组成。固态硬盘在接口的规范和定义、功能及使用方法 上与普通硬盘的完全相同。

相较于HDD,SSD在防震抗摔、传输速率、功耗、重量、噪音上有明显优势,SSD传输速率性 能是HDD的2倍甚至更高。

相较于SSD,HDD在价格、容量、使用寿命上占有绝对优势,且由于结构上的差异,HDD可通过一些手段对曾经存储过的数据进行恢复,而SSD则无法恢复,目前SSD不能完全取代HDD

 

在使用硬盘时,数据被转化成0和1记录在磁盘上,读取磁盘上的数据就是一个寻找对应数据在磁盘上的位置的过程,那么就需要对磁盘上的数据做一个区分,区分的办法是将磁盘进行分割,首先是将磁盘分割成一圈一圈的,如同运动场的跑道,每一圈“跑道”称之为“磁道”,磁道的编号从0开始,越靠外的编号越小,而后将每个磁道再进行分割,使得每个小块里存储的数据大小为512个字节,这个小块称之为“扇区”,之所以叫扇区,是因为在老式的磁盘结构中,每一磁道的分割的次数是一样的,从内到外的扇区组成了一个扇子一样的结构,称之为“扇面”,然而在老式结构下,内外磁道上的扇区存储都是512个字节,这样就会造成外磁道上扇区空间的浪费,现代新式硬盘使用了ZBR结构,将每个磁道等面积划分512字节的空间作为一个扇区,所以不同磁道扇区数不同。现在的磁盘都是新式扇区划分结构,但反应在系统中,磁盘信息依然是依照旧式结构来进行显示和计算的。

ZBR结构硬盘扇区分割示意图

磁盘容量或分区容量的计算

虽然现在的磁盘都是新式结构(每磁道扇区数不同),但是在磁盘信息上还是根据旧式结构来计算的,也就是说每个磁道扇区数相同,”扇区/磁道”的值说明每个磁道上有多少个扇区,也可以将其认为是新式结构下的平均值。

[root@Centos6 ~ 06:45:34]#fdisk -l /dev/sda

 

Disk /dev/sda: 214.7 GB, 214748364800 bytes

255 heads, 63 sectors/track, 26108 cylinders        255个磁头(虚拟)、63个扇区/磁道(平均数)26108个柱面

Units = cylinders of 16065 * 512 = 8225280 bytes   单元块

Sector size (logical/physical): 512 bytes / 512 bytes  扇区的size

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x0007cfab

磁盘相关英文词汇:

disk             磁盘

heads        磁头。Linux系统中查看到的heads一般包括很多虚拟磁头,实际的物理磁盘的一块盘片上下两面一面一磁头,即2个磁头。

sectors      扇区。一磁道上划分多个扇形区域,一般默认一扇区512字节。

track              磁道。盘片上一圈算一磁道。

cylinders        柱面。所有盘片的同一半径的磁道组成一柱面。柱面数=盘片数*盘片上的磁道数。

units              单元块。大小等于一个柱面大小。

磁盘或分区大小计算方法:

磁盘大小=units×柱面数(cylinders)

磁盘大小=磁头数(heads)×每磁道上的扇区数(sectors)×512×柱面数(cylinders)

额外解释一下柱面的概念,前面强调过,硬盘所有的磁头都是同步运动的,所有的盘片也是同步旋转的,而在读取或写入数据时,不可能是一个磁头在动作将数据写在一个盘面上,其他磁头干转圈不干活,而是所有磁头都对与它们相对应的磁道进行动作,在这样的情况下,虽然各个盘片是分开的,但事实上成为了一个整体被共同读写,所以就有了柱面的概念。在后面要学习的磁盘分区中,分区就是以柱面来进行分界的。

分区是为了在逻辑上将某些柱面隔开形成边界。它是以柱面为单位来划分的,首先划分外圈柱面,然后不断向内划分。

由于硬盘的转速恒定,在ZBR硬盘结构的下,硬盘转动时磁头扫过外圈的扇区数比扫过内圈的扇区数要多,而每个扇区的数据都是512个字节,外圈读写越外圈磁道中的数据就比越内圈快,所以第一个分区在读写性能上比后面的分区更好。在Windows操作系统上,C盘的速度是最快的,越后面的区越慢就是这个原因。

磁盘分区能起到的作用:

在磁盘数据量非常大的情况下,划分分区的好处是扫描块位图等更快速:不用再扫描整块磁盘的块位图,只需扫描对应分区的块位图。(块位图的概念类似国家分省、省分市、市分区县,类似的概念在linux文件系统中也有大量的应用,都是为了能够更快的寻址,节约系统资源和时间)

优化I/O性能

实现磁盘空间配额限制

提高修复速度

隔离系统、程序和数据

安装多个OS

采用不同文件系统

磁盘分区的方式:

目前有两种分区方式:MBR,GPT

MBR分区和分区表信息

MBR格式的磁盘中,会维护磁盘第一个扇区——MBR扇区,前面讲过一个扇区只有512个字节,在该扇区中第446字节之后的64字节是分区表,每个分区占用16字节,所以限制了一块磁盘最多只能有4个主分区(Primary,P),如果多于4个区,只能将主分区少于4个,通过建立扩展分区(Extend,E),然后在扩展分区建立逻辑分区(Logical,L)的方式来突破4个分区的限制,另外MBR格式的的分区法是无法对超过2T的硬盘进行分区的。

分区表结构示意图

硬盘主引导记录MBR由4个部分组成

1、主引导程序:偏移地址0000H–0088H 它负责从活动分区中装载,并运行系统引导程序。

2、出错信息数据区:偏移地址0089H–00E1H为出错信息,00E2H–01BDH全为0字节。

3、分区表(DPT,Disk Partition Table):含4个分区项,偏移地址01BEH–01FDH,每个分区表项长16个字节,共64字节,分为分区项1、分区项2、分区项3、分区项4。

4、结束标志字:偏移地址01FE–01FF的2个字节值为结束标志55AA。

在MBR磁盘上,分区和启动信息是保存在一起的,如果这部分数据被覆盖或破坏,只能重建MBR。而GPT在整个磁盘上保存多个这部分信息的副本,因此它更为健壮,并可以恢复被破坏的这部分信息。GPT还为这些信息保存了循环冗余校验码(CRC)以保证其完整和正确,如果数据被破坏,GPT会发现这些破坏,并从磁盘上的其他地方进行恢复。

GPT分区和分区表信息

GPT格式突破了MBR的限制,它不再限制只能存储4个分区表条目,而是使用了类似MBR扩展分区表条目的格式,它允许有128个主分区,这也使得它可以对超过2TB的磁盘进行分区。

GPT格式的分区为了兼容文件系统,在硬盘的第一个扇区放置了一个类MBR分区表的保护性MBR信息,以方便文件系统准确识别硬盘是否分区。

 

名词解释  LBA(Logical Block Address):逻辑区块地址。是描述电脑存储设备上数据所在区块的通用机制,一般用在像硬盘这样的辅助记忆设备。LBA可以意指某个数据区块的地址或是某个地址所指向的数据区块。LBA寻址方式和MBR分区格式的寻址方式CHS是不一样的,有什么不一样不做深入研究。

 

EFI部分可以分为4个区域:EFI信息区(GPT头)、分区表、GPT分区区域和备份区域。

EFI信息区(GPT头):起始于磁盘的LBA1,通常也只占用这个单一扇区。其作用是定义分区表的位置和大小。GPT头还包含头和分区表的校验和,这样就可以及时发现错误。

分区表:分区表区域包含分区表项。这个区域由GPT头定义,一般占用磁盘LBA2~LBA33扇区,每扇区可存储4个主分区的分区信息,所以共能分128个主分区。分区表中的每个分区项由起始地址、结束地址、类型值、名字、属性标志、GUID值组成。分区表建立后,128位的GUID对系统来说是唯一的。

GPT分区:最大的区域,由分配给分区的扇区组成。这个区域的起始和结束地址由GPT头定义。

备份区:备份区域位于磁盘的尾部,包含GPT头和分区表的备份。它占用GPT结束扇区和EFI结束扇区之间的33个扇区。其中最后一个扇区用来备份1号扇区的EFI信息,其余的32个扇区用来备份LBA2~LBA33扇区的分区表。

GPT的分区方式是需要通过UEFI来引导的,BIOS引导是不支持GPT格式的硬盘引导的。

BIOS和UEFI都是固话在计算机主板上一个芯片中的小程序,工作在操作系统之前,其作用是为计算机提供最底层的、最直接的硬件设置和控制。

linux中添加磁盘

正常情况下,添加磁盘后需要重新启动系统,但在实际生产过程中,往往不方便重启,在linux系统中可以通过下面的方法实现硬盘的热插拔

echo “- – -” > /sys/class/scsi_host/host2/scan

linux下的分区管理

lsbik 该命令能够列出当前的块设备的信息,块设备包括硬盘、闪存盘、CDROM等。

[root@Centos6 ~ 02:41:35]#lsblk

NAME   MAJ:MIN   RM  SIZE       RO TYPE MOUNTPOINT

sr0             11:0    1    3.7G      0     rom

sr1             11:1    1    2G       0     rom

sda           8:0       0    200G     0     disk

├─sda1     8:1       0    1G       0     part       /boot

├─sda2     8:2       0     48.8G    0     part       /

├─sda3     8:3       0     29.3G    0     part       /data

├─sda4     8:4       0    1K       0     part

├─sda5     8:5       0    2G       0     part       [SWAP]

└─sda6     8:6       0   10G             0            part       /mnt/disk1

NAME:块设备名。

MAJ:MIN:主要和次要设备号。

RM:是否可移动设备。1表示可移动

SIZE:设备的容量大小信息。

RO:表明设备是否为只读。1表示只读

TYPE:显示块设备是否是磁盘或磁盘上的一个分区。rom只读存储、disk硬盘、part分区

MOUNTPOINT:本栏指出设备挂载的挂载点。

选项:

-a, –all            显示所有设备。

-b, –bytes          以bytes方式显示设备大小。

-d, –nodeps         不显示 slaves 或 holders。

-D, –discard        print discard capabilities。

-e, –exclude <list> 排除设备 (default: RAM disks),跟的是主设备号。

-f, –fs             显示文件系统信息。

-h, –help           显示帮助信息。

-i, –ascii          use ascii characters only。

-m, –perms          显示权限信息。

-l, –list           使用列表格式显示。

-n, –noheadings     不显示标题。

-o, –output <list>  输出列。

-P, –pairs          使用key=”value”格式显示。

-r, –raw            使用原始格式显示。

-t, –topology       显示拓扑结构信息。

创建分区主要有3个命令fdisk、gdisk、parted。

fdisk工具用来分MBR磁盘上的区。要分GPT磁盘上的区,可以使用gdisk。这两种工具都是交互时的分区,parted工具对这两种格式的磁盘分区都支持,并且parted工具的分区是即时生效的,是比较危险的一种分区工具,一般用在非交互的场景,比如脚本,当然fdisk和gdisk也能实现非交互是分区,只是书写上比parted麻烦一点。

如果一个存储设备已经分过区,那么它可能是MBR格式的,也可能是GPT格式的,必须使用对应的分区工具进行。两种格式的都可以使用parted进行分区,但新分区的格式必须与旧分区一致,因为无论何种格式的分区,它的分区表和分区标识都已固定。

fdisk及其主要选项:

[root@Centos6 ~ 03:33:13]#fdisk /dev/sda

 

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): m

Command action

a   toggle a bootable flag

b   edit bsd disklabel

c   toggle the dos compatibility flag

d   delete a partition                      删除分区,如果删除扩展分区,会同时删除里面的逻辑分区

l   list known partition types                列出分区类型

m   print this menu                       显示本列表,即帮助信息

n   add a new partition                    创建新分区(new)

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

t   change a partition’s system id            修改分区类型

u   change display/entry units

v   verify the partition table

w   write table to disk and exit               保存分区信息并退出,即按之前设置的方案执行分区操作

x   extra functionality (experts only)

fdisk操作全部是在内存中执行的,必须保存生效。保存后,内核还未识别该分区,可以查看/proc/partition目录下存在的文件,这些文件是能被内核识别的分区。运行partprobe或partx命令重新读取分区表让内核识别新的分区,内核识别后才可以格式化。而且分区结束时按w保存分区表有时候会失败,提示重启,这时候运行partprobe命令可以代替重启就生效,也可指定在新硬盘上重加载分区表,不指定的话命令会试图重加载所有硬盘的分区表,提示一堆硬盘忙的信息。

gdisk及其主要选项:

gdisk的用法和fdisk的用法很类似,但在部分选项上有所不同

Command (? for help): ?

b       back up GPT data to a file

c       change a partition’s name

d       delete a partition                         删除分区

i       show detailed information on a partition      列出分区详细信息

l       list known partition types                   列出所有已知的分区类型

n       add a new partition                       添加新分区

o       create a new empty GUID partition table (GPT)   创建一个新的空的guid分区表

p       print the partition table                       打印(显示)分区表信息

q       quit without saving changes                   退出不保存分区方案

r       recovery and transformation options (experts only)

s       sort partitions

t       change a partition’s type code                  修改分区类型

v       verify disk

w       write table to disk and exit                     将已经设定好的分区信息写入到磁盘然后退出

x       extra functionality (experts only)

?       print this menu                               显示本列表即帮助信息

分区之后,有时候会提示错误,这是由于硬件和软件信息未同步造成的,硬盘需要通知内核

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

cat /proc/partations

centos6通知内核重新读取硬盘分区表

新增分区用

partx-a /dev/DEVICE

kpartx-a /dev/DEVICE -f: force

删除分区用

partx-d –nrM-N /dev/DEVICE  删除从第m–n分区的记录

CentOS 5,7: 使用partprobe

partprobe [/dev/DEVICE]

parted分区工具

parted支持mbr格式和gpt格式的磁盘分区。它的强大在于可以一步到位而不需要不断的交互式输入(也可以交互式)。parted分区工具是实时的,所以每一步操作都是直接写入磁盘而不是写进内存,因此使用该命令要谨慎。

parted命令既可以交互式的创建分区,也可以跟上参数直接操作。

parted有很多子命令,但常用的主要有以下几个

语法:parted [选项]… [设备[命令[参数]…]…]

选项:

-h,–help      显示帮助信息

-l,–list        列出所有设备的分区信息

-i,–interacrive 在必要时提示用户

-s,–script      脚本模式回答一切默认值

-v,–version     显示版本

parted的主要子命令:

help [COMMAND]                                       打印通用求助信息,或关于 COMMAND 的信息

mklabel 标签类型                                        创建新的磁盘标签 (分区表)

mkpart 分区类型 [文件系统类型] 起始点 终止点             创建一个分区

name NUMBER 名称                                   将编号为 NUMBER 的分区命名为“名称”

print [devices|free|list,all|NUMBER]                          显示分区表、可用的设备、空闲空间、所有已找到的分区或特定分区

quit                                                     退出程序

rescue 起始点 终止点                                     挽救临近“起始点”、“终止点”的遗失的分区

rm NUMBER                                           删除编号为NUMBER的分区

select 设备                                               重选磁盘进入parted状态

set NUMBER 标志 状态                                  改变编号为NUMBER的分区的标志

disk_set FLAG STATE                                            设置指定磁盘的状态

disk_toggle [FLAG]                                              修改指定磁盘的状态

set NUMBER FLAG STATE                                      设置分区状态,如将其off或on

toggle [NUMBER [FLAG]]                                        修改分区号为NUMBER的系统类型

unit UNIT                                                     修改默认单位,kB/MB/GB等

version                                                       显示该工具的GNU版本号和版权

常用的命令只有mklabel、rm、print、mkpart、help、quit,有些子命令7版本上已经删除,不再学习使用。

parted分区的前提是磁盘已经有分区表(partition table)或磁盘标签(disk label),否则将显示”unrecognised disk label”,这是和fdisk/gdisk不同的地方,所以需要先使用mklabel创建标签或分区表,最常见的标签(分区表)为”msdos”和”gpt”,其中msdos分区就是MBR格式的分区表,也就是会有主分区、扩展分区和逻辑分区的概念和限制。parted命令会自动同步软硬件分区表。

常用子命令举例:

parted /dev/sdb mklabel gpt|msdos       创建指定分区方式的分区表

parted /dev/sdb print                   显示对应磁盘或分区的信息列表

parted /dev/sdb mkpart primary 1 200 (默认M)

parted /dev/sdb rm 1   删除1分区

parted –l 列出分区信息

 

查看MBR分区分区表的内容(16进制)

hexdump -C  /dev/sda -n 512

代表只查看前512个字节的二进制数据转换成的16进制数,对硬盘使用,硬盘的前面512个字节代表的就是分区表的信息(包括引导记录,分区表,55AA结束符)

 

备份MBR分区表的内容:

dd if=/dev/sda of=/data/MBR.bak bs=1 count=512  备份之后移至其他硬盘保存

 

同样利用dd命令恢复分区表,在实际生产中,往往多台服务器会使用同样的策略进行部署,如果某块硬盘分区表损坏,又没有备份,可选择复制同样分区策略的其他硬盘的分区表进行恢复。

dd if=/data/MBR.bak of=/dev/sda

 

补充命令:

dd命令:convert and copy a file 转换和复制文件,读取文件时是以二进制格式按指定大小分块读取。

用法:

dd if=/PATH/FROM/SRC of=/PATH/TO/DEST

bs=#:block size, 复制单元大小

count=#:            复制多少个bs

of=file                   写到所命名的文件而不是到标准输出

if=file                    从所命名文件读取而不是从标准输入

bs=size                 指定块大小(既是是ibs也是obs)

ibs=size                一次读size个byte

obs=size              一次写size个byte

cbs=size              一次转化size个byte

skip=blocks          从开头忽略blocks个ibs大小的块,忽略读取的文件或设备的前多少个块。

seek=blocks          从开头忽略blocks个obs大小的块,跳过要写入的文件或设备的前面多少个块。

count=n           只拷贝n个记录

分区命令的非交互式操作:

parted命令的非交互式操作前面已经有例子了,fdisk命令和gdisk命令的非交互式操作也很简单,虽然它们都是交互式的,但程序必然有其规律,思路就是复现整个交互式操作的流程,将希望进行的操作通过echo命令打印出来并在操作间填入\n回车符就可以了,当然也可以写入文件中通过读取文件来实现这一过程。

示例:

echo -e “n\np\n1\n\n+5G\nn\np\n2\n\n+1G\nw\n”  | fdisk /dev/sdb

 

echo -e “n\np\n1\n\n+5G\nn\np\n2\n\n+1G\nw\n” >/tmp/a.txt

fdisk /dev/sdb </tmp/a.txt

 

gdisk命令也一样,只有细节上的区别:

echo -e “n\n1\n\n+3G\n\nw\nY\n” | gdisk /dev/sdb

 

格式化分区

分区结束后就需要格式化创建文件系统了,格式化分区的过程就是创建文件系统的过程。前面学习过,数据是以二进制的方式存放在磁盘上的,或者说,是以磁化的方向存放在磁盘上的,一个没有进行格式化的磁盘存储的数据(通过dd命令强行写入)是无法转换成“文件”的,仅仅是一堆无法识别其含义的二进制,而格式化创建了文件系统,才能识别磁盘上二进制到底代表的是什么意思,这就是创建文件系统的意义。

文件系统的定义和作用

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

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

通过配置文件查看支持的文件系统:/lib/modules/uname –r/kernel/fs

也可直接通过命令mkfs加双击TAB键来查看(当然,查看出来的内容本身就是一个命令,作用就是创建对应的文件系统)

在centos6和centos7安装时的默认的文件系统是不同的,6上是ext系列的ext4,而7上使用的是较新的xfs系统。

mkfs.FILESYSTEM 系列命令

[root@Centos7 ~ 07:00:19]#mkfs

mkfs         mkfs.cramfs  mkfs.ext3    mkfs.fat     mkfs.msdos   mkfs.xfs

mkfs.btrfs   mkfs.ext2    mkfs.ext4    mkfs.minix   mkfs.vfat

mkfs 工具,默认创建的是ext2文件系统,指定的”-t”选项其实是在调用对应文件系统专属的格式化工具。

语法:mkfs [-t fstype] 分区

mke2fs工具

mkfs.ext2/mkfs.ext3/mkfs.ext4或mkfs -t extX其实都是在调用mke2fs工具。

该工具创建文件系统时,会从/etc/mke2fs.conf配置中读取默认的配置项。

mke2fs [ -c ] [ -b block-size ] [ -f fragment-size ] [ -g blocks-per-group ] [ -G number-of-groups ]

[ -i bytes-per-inode ] [ -I inode-size ] [ -j ] [ -N number-of-inodes ] [ -m reserved-blocks-percentage ]

[ -q ] [ -r fs-revision-level ] [ -v ] [ -L volume-label ] [ -S ] [ -t fs-type ] device [ blocks-count ]

 

选项说明:

-t fs-type         : 指定要创建的文件系统类型(ext2,ext3 ext4),若不指定,则从/etc/mke2fs.conf中获取默认的文件系统类型。

-b block-size      : 指定每个block的大小,有效值有1024、2048和4096,单位是字节。

-I inode-size      : 指定inode大小,单位为字节。必须为2的幂次方,且大于等于128字节。值越大,说明inode的集合体inode table占用越多的空间,这不仅会挤占文件系统中的可用空间,还会降低性能,因为要扫描inode table需要消耗更多时间,但是在linux kernel 2.6.10

之后,由于使用inode存储了很多扩展的额外属性,所以128字节已经不够用了,因此ext4默认的inode size已经变为256,尽管inode大小增大了,但因为使用inode存储扩展属性带来的性能提升远高于inode size变大导致的负面影响,所以仍建议使用256字

节的inode。

-i bytes-per-inode :指定每多少个字节就为其分配一个inode号。值越大,说明一个文件系统中分配的inode号越少,更适用于存储大量大文件,值越小,inode号越多,更适用于存储大量小文件。该值不能小于一个block的大小,因为这样会造成inode多余。

注意,创建文件系统后该值就不能再改变了。

-c                 :创建文件系统前先检查设备是否有bad blocks。

-f fragment-size   : 指定fragments的大小,单位字节。

-g blocks-per-group:指定每个块组中的block数量。不建议修改此项。

-G number-of-groups:该选项用于ext4文件系统(严格地说是启用了flex_bg特性),指定虚拟块组(即一个extent)中包含的块组个数,必须为2的幂次方。

对于ext4文件系统来说,使用extent的功能能极大提升其性能。

-j                 :创建带有日志功能的文件系统,即ext3。如果要指定关于日志方面的设置,在-j的基础上再使用-J指定,不过一般默认即可,具体可

指定的选项看man文档。

-L new-volume-label:指定卷标名称,名称不得超出16字节。

-m reserved-blocks-percentage:指定文件系统保留block数量的比例,保留一部分block,可以降低物理碎片。默认比例为5%。

-N number-of-inodes :强制指定该文件系统应该分配多少个inode号,它会覆盖通过计算得出inode数量的结果(根据block大小、数量和每多少字节分配一个inode得出Inode数量),但是不建议这么做。

-q                  :安静模式,可用于脚本中

-S                  :重建superblock和group descriptions。在所有的superblock和备份的superblock都损坏时有用。它会重新初始化superblock和group descriptions,但不会改变inode table、bmap和imap(若真的改变,该分区数据就全丢了,还不如重新格式化)。在重建superblock后,应该执行e2fsck来保证文件系统的一致性。但要注意,应该完全正确地指定block的大小,其改选项并不能完全保证数据不丢失。

-v                  :输出详细执行过程

最有可能用到的选项为”-t”指定文件系统类型,”-b”指定block大小,”-I”指定inode大小,”-i”指定分配inode的比例。

tune2fs 命令可以修改文件系统属性,但格式化好文件系统之后没什么能改的,事实上只会用它修改自检策略。

语法:tune2fs [  -c  max-mount-counts ] [ -i interval-between-checks ]

-c:修改文件系统最多挂载多少次后进行自检,设置为0或-1将永不自检;

-i:修改过了多少时间进行自检。时间单位可以指定为天(默认)/月/星期[d|m|w],设置为0将永不自检。

设置强制检查前文件系统可以挂载的次数

tune2fs -c 30 /dev/sda1

关闭强制检查挂载次数限制

tune2fs -c -l /dev/sda1

1天后检查

tune2fs -i 1d /dev/sda1

3周后检查

tune2fs -i 3w /dev/sda1

半年后检查

tune2fs -i 6m /dev/sda1

禁用时间检查

tune2fs -i 0 /dev/sda1

CentOS7上的xfs文件系统管理命令:

xfs,可通过输入xfs后双击TAB键来查看xfs的系列命令

xfs_admin: 调整 xfs 文件系统的各种参数

xfs_copy: 拷贝 xfs 文件系统的内容到一个或多个目标系统(并行方式)

xfs_db: 调试或检测 xfs 文件系统(查看文件系统碎片等)

xfs_check: 检测 xfs 文件系统的完整性

xfs_bmap: 查看一个文件的块映射

xfs_repair: 尝试修复受损的 xfs 文件系统

xfs_fsr: 碎片整理

xfs_quota: 管理 xfs 文件系统的磁盘配额

xfs_metadump: 将 xfs 文件系统的元数据 (metadata) 拷贝到一个文件中

xfs_mdrestore: 从一个文件中将元数据 (metadata) 恢复到 xfs 文件系统

xfs_growfs: 调整一个 xfs 文件系统大小(只能扩展)

xfs_freeze    暂停(-f)和恢复(-u)xfs 文件系统

xfs_logprint: 打印xfs文件系统的日志

xfs_mkfile: 创建xfs文件系统

xfs_info: 查询文件系统详细信息

xfs_ncheck: generate pathnames from i-numbers for XFS

xfs_rtcp: XFS实时拷贝命令

xfs_io: 调试xfs I/O路径

blkid 查看设备文件系统类型和UUID,有很多选项提供了其他功能,但一般不用。

[root@Centos6 ~ 07:13:35]#blkid

/dev/sda1: UUID=”be6a723d-ca1d-4dce-8f21-cabaed0e8da3″ TYPE=”ext4″

/dev/sda2: UUID=”86b9f4cf-1442-4293-8164-1cc5594abb5f” TYPE=”ext4″

/dev/sda3: UUID=”4f58d29b-a2f6-4c8a-b30c-0a44b2b2131a” TYPE=”ext4″

/dev/sda5: UUID=”54f5dd21-1c97-4646-85f0-cdcc802626b1″ TYPE=”swap”

/dev/sda6: UUID=”622cf14f-fd05-4b34-8863-32c2a1cab17b” TYPE=”ext4″

两个选项:

-U UUID: 根据指定的UUID来查找对应的设备

-L LABEL:根据指定的LABEL来查找对应的设备

e2label:管理ext系列文件系统的LABEL(标签,卷标)

e2label DEVICE [LABEL]

findfs 用于查找分区

findfs[options] LABEL=<label>   通过卷标查找

findfs[options] UUID=<uuid>    通过UUID查找

还有前面曾经接触过,但并未进行更多学习的命令:

du命令用于评估文件的空间占用情况,它会统计每个文件的大小,统计时会递归统计目录中的文件,也就是说,它会遍历整个待统计目录,所以统计速度上可能并不理想。

du [OPTION]… [FILE]…

选项说明:

-a, –all:列出目录中所有文件的统计信息,默认只会列出目录中子目录的统计信息,而不列出文件的统计信息

-h, –human-readable:以人类易读模式显示size

-0, –null:以空字符结尾,即”\0″而非换行的”\n”

-S, –separate-dirs:不包含子目录的大小

-s, –summarize:对每个作为参数的目录做各种的总大小统计,不统计所有目录大小的总和。

-c,–total:对给出的文件或目录做总计。在统计非同一个目录文件大小时使用,例如统计find命令查找出来的一系列目录的总大小。

–max-depth=N:只列出给定层次的目录统计,如果N=0,则等价于”-s”

-x, –one-file-system:忽略不同文件系统上的文件,不对它们进行统计

-X, –exclude-from=FILE:从文件中读取要排除的文件

–exclude=PATTERN:指定要忽略不统计的文件

注意:

(1).上面的选项中,有些是不列出某些项,有些是不统计某些项,它们是不一样的。

(2).如果要统计的目录下挂载了一个文件系统,那么这个文件系统的大小也会被计入该目录的大小中。

df用于显示磁盘空间使用率,默认显示的大小是1K大小block数量,也就是以k为单位。

和du不同的是,df是读取每个文件系统的superblock信息,所以评估速度非常快。由于是读取superblock,所以如果目录下挂载了另一个文件系统,是不会将此挂载的文件系统计入目录大小的。如果用df统计某个文件的空间使用情况,将会转而统计该文件所在文件系统的空间使用情况。要注意的是,因为统计原理不同,du和df统计的结果可能是不一样的。

语法:df [OPTION]… [FILE]…

选项说明:

-h:以人类易读模式输出size

-i:统计inode使用情况而非空间使用情况

-l, –local:只列出本地文件系统的使用情况,不列出网络文件系统信息

-T, –print-type:同时输出文件系统类型

-t, –type=TYPE:只列出给定文件系统的统计信息

-x, –exclude-type=TYPE:指定不显示的文件系统类型的统计信息

dumpe2fs 该命令用于查看ext类文件系统的superblock及块组信息。使用-h选项将只显示superblock信息。

dumpe2fs 1.41.12 (17-May-2010)

Filesystem volume name:   <none>      卷标

Last mounted on:          /boot        最后一次的挂载点

Filesystem UUID:          be6a723d-ca1d-4dce-8f21-cabaed0e8da3  文件系统UUID

Filesystem magic number:  0xEF53        文件系统魔数

Filesystem revision #:    1 (dynamic)           文件系统修改数

Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize 文件系统支持的功能

Filesystem flags:         signed_directory_hash

Default mount options:    user_xattr acl   默认挂载选项,可以看到支持acl

Filesystem state:         clean           文件系统状态,clean代表健康(干净)

Errors behavior:          Continue

Filesystem OS type:       Linux         文件系统对应操作系统

Inode count:              65536        inode总数

Block count:              262144        block总数

Reserved block count:     13107         已使用的block数

Free blocks:              241071        未使用的block数

Free inodes:              65498         未使用的inode数

First block:              0

Block size:               4096           block大小

Fragment size:            4096

Reserved GDT blocks:      63

Blocks per group:         32768

Fragments per group:      32768

Inodes per group:         8192

Inode blocks per group:   512

Flex block group size:    16

Filesystem created:       Tue Mar 27 16:56:55 2018

Last mount time:          Tue May  1 14:31:09 2018

Last write time:          Tue May  1 14:31:09 2018

Mount count:              11

Maximum mount count:      -1

Last checked:             Tue Mar 27 16:56:55 2018

Check interval:           0 (<none>)

Lifetime writes:          108 MB

Reserved blocks uid:      0 (user root)

Reserved blocks gid:      0 (group root)

First inode:              11

Inode size:               256          每个inode的大小

Required extra isize:     28

Desired extra isize:      28

Journal inode:            8

Default directory hash:   half_md4

Directory Hash Seed:      bc65820a-6f1a-4b20-a372-30c1ca7784ab

Journal backup:           inode blocks

Journal features:         (none)

Journal size:             32M

Journal length:           8192

Journal sequence:         0x00000027

Journal start:            1

tune2fs:重新设定ext系列文件系统可调整参数的值,可以调整的内容并不多。

-l:查看指定文件系统超级块信息;super block

-L ‘LABEL’:修改卷标

-m #:修改预留给管理员的空间百分比

-j: 将ext2升级为ext3

-O: 文件系统属性启用或禁用,–O ^has_journal

-o: 调整文件系统的默认挂载选项,–o ^acl

-U UUID: 修改UUID号 (配合uuidgen使用,该命令用于生成一个随机的UUID)

fsck 检查与修复 Linux 文件系统,(注意是文件系统而非磁盘本身)可以同时检查一个或多个 Linux 档案系统

使用方式 : fsck [-sACVRP] [-t fstype] [–] [fsck-options] filesys […]

选项:

-t : 给定档案系统的型式,若在 /etc/fstab 中已有定义或 kernel 本身已支援的则不需加上此参数

-s : 依序一个一个地执行 fsck 的指令来检查

-A : 对/etc/fstab 中所有列出来的 分区(partition)做检查

-C : 显示完整的检查进度

-d : 打印出 e2fsck 的 debug 结果

-p : 同时有 -A 条件时,同时有多个 fsck 的检查一起执行

-R : 同时有 -A 条件时,省略 / 不检查

-V : 详细显示模式

-a : 如果检查有错则自动修复

-r : 如果检查有错则由使用者回答是否修复

-y : 选项指定检测每个文件是自动输入yes,在不确定那些是不正常的时候,可以执行 # fsck -y 全部检查修复

注意:fsck命令使用时是有很多限制的:

1) 如果可能,先对故障区域做dd全镜像后再执行(使用dd命令将数据镜像到其他磁盘上),或者以只读方式执行,并仔细看修复过程,如果提示大量inode错误、需要重建树、或大小不对等就不可再继续下去了

2) 文件系统常见错误,并且问题通常原因是电源失败、硬件失败、或操作错误,例如没有正常关闭系统

3) fsck 只能运行于未mount的文件系统,不要用于已mount的文件系统

4) 修复完成后,会出现提示“FILE SYSTEM WAS MODIFIED”。这时输入命令 “reboot” 命令重启系统

mount用来显示挂载信息或者进行文件系统挂载,它的功能及其的强大,它不仅支持挂载非常多种文件系统,如ext/xfs/nfs/smbfs/cifs (win上的共享目录)等,还支持共享挂载点、继承挂载点(父子关系)、绑定挂载点、移动挂载点等等功能。

不同的文件系统挂载选项是有所差别的,在挂载过程中如果出错,应该man mount并查看对应文件系统的挂载选项。

mount不只能挂载文件系统,也可以将目录挂载到另一个目录下,其实它实现的是目录”硬链接”,默认情况下,是无法对目录建立硬链接的,但是通过mount可以完成绑定,绑定后两个目录的inode号是完全相同的,但尽管建立的是目录的”硬链接”,但其实也仅是拿来当软链接用。

以下是ext类文件系统的选项,可能有些选项是不支持其他文件系统的。

mount   不跟任何选项将显示当前已挂载信息

mount [-t 欲挂载文件系统类型 ] [-o 特殊选项] 设备名 挂载目录

选项说明:

-a  将/etc/fstab文件里指定的挂载选项重新挂载一遍。

-t  支持ext2/ext3/ext4/vfat/fat/iso9660(光盘默认格式)。 不用-t时默认会调用blkid来获取文件系统类型。

-n  不把挂载记录写在/etc/mtab文件中,一般挂载会在/proc/mounts中记录下挂载信息,然后同步到/etc/mtab,指定-n表示不同步该挂载信息,但仍然可以在/proc/mounts中看到。

-o  指定挂载特殊选项:

loop  挂载镜像文件,如iso文件

ro  只读挂载

rw  读写挂载

auto  相当于mount -a

dev 如果挂载的文件系统中有设备访问入口则启用它,使其可以作为设备访问入口

default rw,suid,dev,exec,auto,nouser,async,and relatime

async   异步挂载,只写到内存

sync    同步挂载,通过挂载位置写入对方硬盘

atime   修改访问时间,每次访问都修改atime会导致性能降低,所以默认是noatime

noatime 不修改访问时间,高并发时使用这个选项可以减少磁盘IO

nodiratime  不修改文件夹访问时间,高并发时使用这个选项可以减少磁盘IO

exec/noexec  挂载后的文件系统里的可执行程序是否可执行,默认是可以执行exec, 优先级高于权限的限定

remount  重新挂载,此时可以不用指定挂载点。

suid/nosuid 对挂载的文件系统启用或禁用suid,对于外来设备最好禁用suid

_netdev 需要网络挂载时默认将停留在挂载界面直到加载网络了。使用_netdev可以忽略网络正常挂载。如NFS开机挂载。

user  允许普通用户进行挂载该目录,但只允许挂载者进行卸载该目录

users  允许所有用户挂载和卸载该目录

nouser  禁止普通用户挂载和卸载该目录,这是默认的,默认情况下一个目录不指定user/users时,将只有root能挂载

上面的有些特殊选项是可以同时使用的,用“,”号隔开。

一般user/users/nouser都用在/etc/fstab中,直接在命令行下使用这几个选项意义不是很大。

 

查看某个目录是否是挂载点,使用mountpoint命令

挂载的参数信息存放在/proc/mounts(是/proc/self/mounts的软链接)中,在/proc/self/mountstats和/proc/mountinfo里则记录了更详细的挂载信息。

umount 设备名或挂载目录

umount -lf 强制卸载

卸载时,既可以使用设备名也可以使用挂载点卸载。有时候挂载网络系统(如NFS)时,设备名很长,这时候可以使用挂载点来卸载就方便多了。

如果用户正在访问某个目录或文件,使得卸载一直显示Busy,使用fuser -v DIR可以知道谁正在访问该目录或文件。使用-k选项kill掉正在使用目录或文件的进程,使用-km选项kill掉文件系统上的所有进程,然后再umount。

 

通过将挂载选项写入到/etc/fstab中,系统会自动挂载该文件中的配置项。但要注意,该文件在开机的前几个过程中就被读取,所以配置错误很可能会导致开机失败。

UUID=86b9f4cf-1442-4293-8164-1cc5594abb5f /                       ext4    defaults        1 1

UUID=be6a723d-ca1d-4dce-8f21-cabaed0e8da3 /boot                   ext4    defaults        1 2

UUID=4f58d29b-a2f6-4c8a-b30c-0a44b2b2131a /data                   ext4    defaults        1 2

UUID=54f5dd21-1c97-4646-85f0-cdcc802626b1 swap                    swap    defaults        0 0

#格式照抄上面的就可以了,最后两项无需考虑,直接0 0即可

UUID=622cf14f-fd05-4b34-8863-32c2a1cab17b /mnt/disk1              ext4    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

最后两列分别表示备份文件系统和开机自检,无需考虑那么多,直接将这两列设置为0就可以了。

万一/etc/fstab配置错误,导致开机无法加载。这时提示输入root密码进入单人维护(单用户)模式,只不过担任模式下根文件系统是只读的,哪怕是root也无法直接修改/etc/fstab,所以应该将”/”文件系统进行重新挂载。

执行下面的命令,重挂载根分区,并给读写权限,再去修改错误的fstab文件记录,再重启,要注意的是进入单用户模式是会断网的,远程连接是不能进行此操作的,只能在本机操作。

mount -n -o remount,rw /

swap分区的添加

1、首先通过fdisk命令或gdisk命令来创建一个swap的分区,fdisk是填完分区策略后,自己输入t来进行指定,gdisk会直接让你输入文件系统对应的16进制码(ID号),MBR和GPT格式的磁盘上这个ID不完全一样,不过一般GPT中的格式是在MBR格式的ID后加上两位数的数值,如MBR中swap的类型ID为82,在GPT中则是8200,在MBR中linux filesystem类型的ID为83,在GPT中则为8300,在MBR中lvm的ID为8e,在GPT中为8e00。

2、swap分区专用的格式化工具mkswap对分好的swap分区进行格式化

[root@Centos7 ~ 09:54:10]#mkswap /dev/sda4

Setting up swapspace version 1, size = 204796 KiB

no label, UUID=7e8535cf-d886-419c-88bd-2cca874342c9

3、使用swap分区专用挂载命令swapon(对应专用卸载命令swapoff)

[root@Centos7 ~ 09:55:08]#swapon /dev/sda4    也可以直接swapon -a

4、永久生效仍然要修改配置文件/etc/fstab,格式照抄配置文件中原有条目即可

[root@Centos7 ~ 10:03:14]#echo “UUID=7e8535cf-d886-419c-88bd-2cca874342c9 swap                    swap    defaults        0 0” >> /etc/fstab

 

实战练习题:

假设系统安装时规划的空间分配不合理,造成/home目录空间紧张,现在希望将普通用户的家目录/home迁移到一块新硬盘上。

首先设计一下流程,要考虑的是实际工作中会遇到的问题

1、准备硬盘,进行分区和创建文件系统的操作

2、通知用户将于某个时间点进行维护工作(也可放在第一步进行)

3、到达维护时间,对/home进行备份

4、备份完毕进入单用户模式

5、将新硬盘进行临时挂载,cp -a 完整复制/home

6、删除原位置的/home下的数据内容释放空间

7、将新硬盘挂载至/home下,并取消临时挂载

8、修改配置文件/etc/fstab让新硬盘开机自动挂载

先用dd命令建立两个大文件模拟一下/home目录空间紧张的状态

[root@www /home 02:21:07]#dd if=/dev/zero of=/home/f2 bs=1M count=2048

2048+0 records in

2048+0 records out

2147483648 bytes (2.1 GB) copied, 5.6171 s, 382 MB/s

[root@www /home 02:19:01]#dd if=/dev/zero of=/home/f1 bs=2M count=2048

2048+0 records in

2048+0 records out

4294967296 bytes (4.3 GB) copied, 18.0292 s, 238 MB/s

[root@www /home 02:22:55]#df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda2        48G   12G   35G  26% /

根分区的空间被占用了26%

第一步

准备硬盘连接到机器并触发总线扫描

[root@www ~ 02:45:48]#echo ‘- – -‘ > /sys/class/scsi_host/host2/scan

[root@www ~ 02:46:07]#lsblk

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sr0     11:0    1 55.2M  0 rom

sr1     11:1    1    2G  0 rom

sda      8:0    0  200G  0 disk

├─sda1   8:1    0    1G  0 part /boot

├─sda2   8:2    0 48.8G  0 part /

├─sda3   8:3    0 29.3G  0 part /data

├─sda4   8:4    0    1K  0 part

├─sda5   8:5    0    2G  0 part [SWAP]

└─sda6   8:6    0   10G  0 part /mnt/disk1

sdb      8:16   0   20G  0 disk

系统已经能看到新的硬盘了,接下来进行分区,分个10G意思一下

[root@www ~ 02:48:07]#fdisk /dev/sdb

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel

Building a new DOS disklabel with disk identifier 0x7fbcb62b.

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 1

Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +10G

 

Command (m for help): p

 

Disk /dev/sdb: 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: 0x7fbcb62b

 

Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1        1306    10490413+  83  Linux

 

Command (m for help): w

The partition table has been altered!

 

Calling ioctl() to re-read partition table.

Syncing disks.

[root@www ~ 02:49:27]#lsblk

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sr0     11:0    1 55.2M  0 rom

sr1     11:1    1    2G  0 rom

sda      8:0    0  200G  0 disk

├─sda1   8:1    0    1G  0 part /boot

├─sda2   8:2    0 48.8G  0 part /

├─sda3   8:3    0 29.3G  0 part /data

├─sda4   8:4    0    1K  0 part

├─sda5   8:5    0    2G  0 part [SWAP]

└─sda6   8:6    0   10G  0 part /mnt/disk1

sdb      8:16   0   20G  0 disk

└─sdb1   8:17   0   10G  0 part

创建文件系统

[root@www ~ 02:49:44]#mkfs.ext4 /dev/sdb1

……省略……

将新分区临时挂载到/mnt下简单的测试一下

[root@www ~ 02:55:55]#mount /dev/sdb1 /mnt/disk1

[root@www /mnt/disk1 02:59:19]#touch f1

[root@www /mnt/disk1 02:59:25]#ls

f1  lost+found

第二步

对系统用户进行广播,通知将于某个时间进行维护

[root@www ~ 03:03:13]#wall “The system will be maintained in 5 minutes. Please keep the data and the data may be lost during maintenance.”

第三步

对/home文件夹进行备份

tar -zcvpf  /data/home.tar.gz /home

第四步

进入单用户模式

[root@www ~ 03:18:55]#init 1

此时远程连接会断开,只能在本机操作,截图麻烦,就不截图了。

完整复制/home下的内容到新硬盘的分区上

cp -a  /home/.  /mnt/disk1

6、删除原位置的/home下的数据内容释放空间

cd /home    为什么要切进去,因为我不想在rm后面打“/”

rm -rf *

7、将新硬盘挂载至/home下,并取消临时挂载

mount /dev/sdb1 /home

umount /mnt/disk1

查看一下/home目录

查看一下根目录空间

[root@www ~ 03:45:26]#df  成功将根目录的空间释放了一部分

Filesystem     1K-blocks    Used Available Use% Mounted on

/dev/sda2       50264772 5757096  41947676  13% /

8、修改配置文件/etc/fstab让新硬盘开机自动挂载

使用blkid查询sdb1的UUID并按格式填入/etc/fstab文件中,最好在vim中使用r!的方法直接读取命令输出,然后再进行格式修改,防止UUID错误造成系统起不来。

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/97443

发表评论

登录后才能评论

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班