linux从入门到精通九:文件系统管理

视频与文档都来自尚硅谷,点此链接(http://www.atguigu.com/linux_video.shtml#linux_yw)

文章目录


前言

文件系统管理其实就是分区管理

像格式化(mkfs、mkfswap)、分区(fdisk、parted)这些命令用的很少,而且只在我们需要分区的时候才会使用到,使用范围极小。不需要背也没必要背,我们只需要把它整理成文档,需要的时候查看这个文档就行。

重要的是df、du这些基本命令,都得记住


一.硬盘结构,了解

1.机械硬盘的逻辑结构

在这里插入图片描述

每个扇区的大小是固定的,为 512Byte。扇区也是磁盘的最小存储单位。




在这里插入图片描述

机械硬盘靠转,固态硬盘有专门的存储芯片,速度比机械硬盘快。
记住一句话:一个磁道相当于一个柱面





2.硬盘接口(了解),主要是SATA,其他基本淘汰了

在虚拟机上无所谓是什么接口类型

  1. IDE 硬盘接口(Integrated Drive Electronics,并口,即电子集成驱动器)也称作“ATA 硬盘”或“PATA 硬盘”,是早期机械硬盘的主要接口,ATA133 硬盘的理论速度可以达到 133MB/s(此速度为理论平均值),IDE 硬盘接口。现在基本淘汰了
  2. SATA 接口(Serial ATA,串口)是速度更高的硬盘标准,具备了更高的传输速度,并具备了更强的纠错能力。目前已经是 SATA 三代,理论传输速度达到 600MB/s(此速度为理论平均值)
  3. SCSI 接口(Small Computer System Interface,小型计算机系统接口)广泛应用在服务器上,具有应用范围广、多任务、带宽大、CPU 占用率低及支持热插拔等优点,理论传输速度达到320MB/s。现在也基本淘汰了









二.文件系统

1. Linux 文件系统的特性

  1. super block(超级块):记录整个文件系统的信息,包括 block 与 inode 的总量,已经使用的 inode 和 block 的数量,未使用的 inode 和 block 的数量,block 与 inode 的大小,文件系统的挂载时间,最近一次的写入时间,最近一次的磁盘检验时间等。

  2. date block(数据块,也称作 block):用来实际保存数据的(柜子的隔断),block 的大小(1KB、2KB 或 4KB)和数量在格式化后就已经决定,不能改变,除非重新格式化(制作柜子的时候,隔断大小就已经决定,不能更改,除非重新制作柜子)。每个 blcok 只能保存一个文件的数据,要是文件数据小于一个 block 块,那么这个 block 的剩余空间不能被其他文件是要;要是文件数据大于一个 block 块,则占用多个 block 块。Windows 中磁盘碎片整理工具的原理就是把一个文件占用的多个 block 块尽量整理到一起,这样可以加快读写速度。

  3. inode(i 节点,柜子门上的标签):用来记录文件的权限(r、w、x),文件的所有者和属组,文件的大小,文件的状态改变时间(ctime),文件的最近一次读取时间(atime),文件的最近一次修改时间(mtime),文件的数据真正保存的 block 编号。每个文件需要占用一个 inode。

注意i节点里没有放文件名,文件名放在上级目录的block块里



查看某一分区的超级块命令:dumpe2fs -h 分区

dumpe2fs -h /dev/sda5

在这里插入图片描述



分区的实际结构:
1.首先会拿出一部分作为超级块,超级快包含分区的一些基本的信息
2.剩余的部分则分为一个个的块组
3.快组里面又分为两部分,一部分放i节点,另一部分放block块,linux中一个block块为4kb

在这里插入图片描述







2.Linux常见文件系统,了解。只要知道越新的文件系统越好就行

redhat 6 用的是ext4文件系统

在这里插入图片描述



在这里插入图片描述

Linux不识别windows下主流的NTFS系统






三.常用的硬盘管理命令

1.df命令,显示空间大小。很常用,需要记忆

df命令只能看到挂载后的文件系统,文件系统没挂载则看不到

[root@localhost ~]# df –ahT
# 一般都是ahT连用
#-a 显示特殊文件系统,这些文件系统几乎都是保存在内存中的。如/proc,因为是挂载在内存中,所以占用量都是 0 
#-h 单位不再只用 KB,而是换算成习惯单位
#-T 多出了文件系统类型一列

tmpfs是一种虚拟文件系统,不需要管它。
在这里插入图片描述



在这里插入图片描述







2.du 命令。统计目录或文件大小的命令。重要,需要记忆

ls命令统计文件大小没问题,但统计目录大小会不准确。因为ll在统计目录的时候他只会统计目录的block块里所有子文件的文件名占了多大空间,不会统计文件名所对应的文件里有多少数据

[root@localhost ~]# du [选项] [目录或文件名]
选项:
-a 显示每个子文件的磁盘占用量。默认只统计子目录的磁盘占用量
-h 使用习惯单位显示磁盘占用量,如 KBMBGB-s 统计总占用量,而不列出子目录和子文件的占用量

在这里插入图片描述




在这里插入图片描述
在虚拟机上,装的东西少,用的数据少,df和du命令的到的/分区所使用的量是一致的,都是15G。
但在实际情况中,df和du得到的目录使用量其实是不一样的,而且随着使用时间的增加,两者的差距会越来越大。(df看到的使用量一般>du看到的使用量)

因为df看到的是空间的使用大小,du看到的是目录的大小,除了文件会占用空间大小,还有很多像临时文件、垃圾文件(这些应该统称为碎片)都会占用空间大小,这些文件需要重启才能释放。而du是只统计文件大小的

du 与 df 的区别:du 是用于统计文件大小的,统计的文件大小是准确的;df 是用于统计空间(或者说分区)大小的,统计的剩余空是准确的。
如果我不想重启服务器,那么用lsof | grep deleted”查看被删除的文件,然后一个进程一个进程的手工 kill 也是可以的。只有傻子会这么做!计划之内的重启是ok且必要的!

在这里插入图片描述



直接输入du,统计的是子目录的磁盘占用量。不会统计目录下文件的磁盘占用量

在这里插入图片描述




在这里插入图片描述





3.fsck文件系统修复命令,一般用不着,了解就行

1.这条命令在系统开机时会自动执行,不需要认为手工执行
2.也就是说如果有个错误可以被修复的话,在系统开机的时候就已经被修复了
3.如果启动完还报错,手工去执行的话肯定也没多大用

[root@localhost ~]# fsck –y /dev/sdb1
#自动修复
#知道有这个命令就好




4.非常重要的显示磁盘状态命令 dumpe2fs

sda:指的是一块硬盘
sd:指的是以SATA、SCSI为接口的硬盘
hd:IDE接口
sda全称:以SATA、SCSI为接口的硬盘a
sdb全称:以SATA、SCSI为接口的硬盘b

sda1、sda2中的a1、a2:分区号
sda1:a硬盘的第一个分区
sda2:a硬盘的第二个分区
sdb3:b硬盘的第三个分区

[root@localhost ~]# dumpe2fs /dev/sda3 
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name: <none> ←卷标名
Last mounted on: / ←挂载点
Filesystem UUID: c2ca6f57-b15c-43ea-bca0-f239083d8bd2 ←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 spars
e_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 ←文件系统状态,正常
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 1826816 ←inode 总数
Block count: 7300864 ←块总数
Reserved block count: 365043
Free blocks: 6634637
Free inodes: 1753533
First block: 0
Block size: 4096 ←块大小
Fragment size: 4096
Reserved GDT blocks: 1022
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Flex block group size: 16
Filesystem created: Mon Nov 12 22:30:41 2012
Last mount time: Tue Apr 9 23:53:29 2013
Last write time: Mon Nov 12 22:45:55 2012
Mount count: 3
Maximum mount count: -1
Last checked: Mon Nov 12 22:30:41 2012
Check interval: 0 (<none>)
Lifetime writes: 3199 MB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256 ←inode 的大小
…省略部分输出…
Group 0: (Blocks 0-32767) [ITABLE_ZEROED] ←第一个数据组的内容
 校验和 0xcb85,8179 个未使用的 inode
 主 superblock at 0, Group descriptors at 1-2
 保留的 GDT 块位于 3-1024
 Block bitmap at 1025 (+1025), Inode bitmap at 1041 (+1041)
 Inode 表位于 1057-1568 (+1057)
 23513 free blocks, 8179 free inodes, 2 directories, 8179 个未使用的 inodes
 可用块数: 9255-32767
 可用 inode 数: 14-8192
…省略部分输出…



加个-h选项可以只看超级块信息

在这里插入图片描述



在这里插入图片描述







5、查看文件的详细时间

stat 文件名 查看文件的详细时间

例如
[root@localhost ~]# stat test.sh
 File: `test.sh' 
#文件名
 Size: 427 Blocks: 8 IO Block: 4096 regular file
#文件大小 占用块 系统分区块大小
Device: fd00h/64768d Inode: 23724038 Links: 1
#存放文件的设备 inode 号 硬链接数
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
权限 属主 属组
Access: 2011-10-29 22:27:45.000000000 +0800
Modify: 2011-09-14 18:02:00.000000000 +0800
Change: 2011-10-25 22:21:44.000000000 +0800
access 访问时间
modify 数据修改时间
change 状态修改时间

在这里插入图片描述







6、判断文件类型

file 文件名 判断文件类型
type 命令名 判断命令类型

在这里插入图片描述



在这里插入图片描述





四.fdisk 命令手工分区

我们其实已经在图形界面下分配了硬盘,但我们不能保证装好系统后就没有新的硬盘进来,不再需要分区了。这不现实



1. fdisk -l

sda:指的是一块硬盘
sd:指的是以SATA、SCSI为接口的硬盘
hd:IDE接口
sda全称:以SATA、SCSI为接口的硬盘a
sdb全称:以SATA、SCSI为接口的硬盘b

sda1、sda2中的a1、a2:分区号
sda1:a硬盘的第一个分区
sda2:a硬盘的第二个分区
sdb3:b硬盘的第三个分区

fdisk -l:查看系统所有硬盘及分区(mount、df命令也可以),看不到磁盘还剩多少空间


sda硬盘信息如下:
(sdb是用来做实验的)
在这里插入图片描述
disk identifier:磁盘标识符的意思



在这里插入图片描述



在这里插入图片描述







2.在虚拟机中添加新硬盘的方法

因为我们在安装Linux的时候已经把sda硬盘用完了,所以现在需要一块新的硬盘

1.关机
2.点击设置
在这里插入图片描述

3.添加硬盘
在这里插入图片描述



在这里插入图片描述



在这里插入图片描述



在这里插入图片描述



在这里插入图片描述



在这里插入图片描述

然后重启就行





3.fdisk /dev/sdb 进行磁盘分区(分区还没有分区号)只识别MBR分区表

我们现在正准备分区(意思说还没有分区),所以不需要写分区号。无论是fdisk还是后面的parted,都不要写分区号!!

3.1 fdisk 交互指令说明:

在这里插入图片描述





特别注意画横线的
在这里插入图片描述

命令l:查看现有文件系统类型的id号。如果我们不写id号,默认为83,标准分区
命令t可以改变它的id号

在这里插入图片描述



在这里插入图片描述



在这里插入图片描述




3.2 开始新建分区

在这里插入图片描述




  1. 一个磁道就相当于一个柱面,柱面是硬盘的基本存储单位
  2. Linux分区容量是按总柱面数来算的,一个柱面约为8点几MB
  3. 分区实际上是按柱面分的,只不过他觉得这样用户使用起来不方便,所以提供了接口让用户直接输入字节大小就行(记得一定要写单位!!不写单位就是成柱面来算了,加了单位系统才认为我们是按大小来算的),但最后还是会转换为柱面来计算大小,所以大小稍微会和我们写的字节大小有误差
  4. 20G约为2610个柱面
  5. 1000MB约为125-126个柱面
  6. 1024MB=1G约为128个柱面
    在这里插入图片描述


在这里插入图片描述

sdb2只是举个例子




分完主分区后,接着我们要把其他空间全部分给扩展分区
在这里插入图片描述



在这里插入图片描述



在这里插入图片描述



接下来在扩展分区里再分逻辑分区
在这里插入图片描述
暂时分2G,还有空间以后再说。



在这里插入图片描述



在这里插入图片描述





注意

有时因为系统的分区表正忙,则需要重新启动系统之后才能使新的分区表生效。

Command (m for help): w ←保存退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: 
Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot. ←要求重启动,才能格式化
Syncing disks.

因为分区表被占用,这次分完后,过一会又分,没重启,他就认为分区表正忙

他要求重启咱就重启是的,而且重启后他会帮我们保存修改的内容的,不需要再重新操作了





4.partprobe。知道有这个命令就行,因为目前已经不起作用了,不要管这个命令。

在redhat3-5版本之间可以用这个命令强制修改分区表来避免重启,因为重启比较麻烦。但现在已经不起作用了

强制重读所有分区文件,重新挂载分区文件内所有分区。这不是分区必须
命令,如果没有提示重启,不要管这条命令直接进行下一步操作,如果提示重启的话重启系统就行

(Warning: Unable to open /dev/hdc read-write (Read-only file system). /dev/hdc has 
been opened read-only.
光盘只读挂载,不是错误,不用紧张)
如果这个命令不存在请安装 parted-2.1-18.el6.i686 这个软件包)

1.也就是说当我们新建分区后,按w保存退出,它如果没有提示重启,我们就进行下一步:格式化
2.如果提示了要重启,那我们就重启,再格式化。因为partprobe这条命令是无效的





5.格式化 建立文件系统 ext4 是 redhat6 默认文件系统

注意分区必须经过格式化、挂载后才能使用。扩展分区不能写入数据也不能格式化,唯一作用是在里面包含逻辑分区

在这里插入图片描述

mkfs -t ext4 /dev/sdb1

mkfs -t ext4 /dev/sdb5



在这里插入图片描述




在这里插入图片描述





mkfs 命令非常简单易用,不过是不能调整分区的默认参数的(比如块大小是 4096),这些默认参数除非特殊情况,否则不需要调整,如果想要调整就需要使用 mke2fs 命令进行重新格式化,命令
格式如下:

[root@localhost ~]# mke2fs [选项] 分区设备文件名
选项:
-t 文件系统: 指定格式化成哪个文件系统,如 ext2,ext3,ext4
-b 字节: 指定 block 块的大小
-i 字节: 指定“字节/inode”的比例,也就是多少个字节分配一个 inode
-j: 建立带有 ext3 日志功能的文件系统
-L 卷标名: 给文件系统设置卷标名,就不使用 e2label 命令设定了
举个例子:
[root@localhost ~]# mke2fs -t ext4 -b 2048 /dev/sdb6 
#格式化分区,并指定 block 的大小为 2048

根本就没有必要调整默认参数,所以mke2fs只要了解就行






6. 建立挂载点

硬盘必须挂载后使用,挂载点就是空目录

mkdir /disk1 ------------ /dev/sdb1 把 sdb1 打算挂载到/disk1 目录中
mkdir /disk5 ------------ /dev/sdb5 把sdb5挂载到/disk5中



7.挂载

mount /dev/sdb1 /disk1
mount /dev/sdb5 /disk5


8. 查看

  1. mount 查看所有已经挂载的分区和光盘
  2. fdisk -l 查看系统分区.fdisk -l好像看不到它挂载到哪里
  3. df 查看分区占用百分比
    在这里插入图片描述


在这里插入图片描述



在这里插入图片描述



在这里插入图片描述

fdisk -l 只能看分区情况,不能看分区挂载到哪里
想看它挂载到哪里还是得用mount或df命令





9.自动挂载

移动、便携式存储设备禁止自动挂载,只允许固定存储设备自动挂载。不然可能会导致系统启动不了

基本分区(也就是主分区和扩展分区)在挂载完后不支持改变大小,所以事先就要估计好我们到底需要多少空间

如果实在要改分区大小,也只能在挂载前改,更改方法跟新建分区方法一样

不过Linux下的LVM分区支持动态改变大小

  1. 自动挂载就是修改分区自动挂载文件
  2. vi /etc/fstab
  3. 注意:此文件直接参与系统启动,如果修改错误,系统启动报错





在这里插入图片描述



/dev/sdb1 /disk1 ext3 defaults 1 2
第一列: 设备文件名
注意:第一列既可写文件名也可写UUID号,推荐写UUID号,因为当一个硬盘坏了的时候,我们换一块新硬盘,分区可能仍然是sdb1,但这时系统可能会搞不清我们到底用的是哪个硬盘

使用 UUID 进行挂载,UUID(硬盘通用唯一识别码,可以理解为硬盘的 ID)

  1. 这个字段在 CentOS 5.5 的系统当中是写入分区的卷标名或分区设备文件名的,现在变成了硬盘的 UUID。这样做的好处是当硬盘增加了新的分区,或者分区的顺序改变,再或者内核升级后,任然能够保证分区能够正确的加载,而不至于造成启动障碍
  2. 那么每个分区的 UUID 到底是什么呢?我们讲过的 dumpe2fs 命令是可以查看到的,命令
    如下:
[root@localhost ~]# dumpe2fs /dev/sdb5

[root@localhost ~]# ls -l /dev/disk/by-uuid/

在这里插入图片描述



在这里插入图片描述



在这里插入图片描述



第二列 挂载点
第三列 文件系统
第四列 挂载选项,具体的选项如下图。注意devpts的第四列写的是gid=5,mode=620。这是个例外不要管他
在这里插入图片描述




在这里插入图片描述

第五列 1 是否可以被备份 0 不备份 1 每天备份 2 不定期备份

第六列 2 是否检测磁盘 fsck 0 不检测 1 启动时检测 2 启动后检测
对于第六列,除了根分区写1,其他都为2




10.重启测试

输入mount -a,mount -a会重新挂载所有内容,用它进行测试
没有错误后再重启系统







五./etc/fstab/文件修复

注意:所有修复的前提都是要能拿到本机

redhat6开始对fstab文件的容忍度已经很高了,除了设备名写错外,挂载点什么的写错仍然可以启动系统

实验案例:/etc/fstab文件中一个设备名写错了导致无法启动系统该如何解决

在这里插入图片描述



在这里插入图片描述



在这里插入图片描述



然后重启系统,发现报错
但我们发现它允许 我们输入密码或者按ctrl+D来继续
在这里插入图片描述



理论我们输入root密码后再把改错的内容改回来就行了
在这里插入图片描述



但我们发现我们无法保存

在这里插入图片描述




在这里插入图片描述



其实原因并不是我们没有对这个文件有写权限,是我们对整个分区都没有写权限!!!
真实的原因是我们的分区挂载之后被划成了只读,只要把/分区(注意重新瓜挂载的是/分区)重新挂载下,挂载为读写权限就可以修改了

[root@localhost ~]# mount -o remount,rw /

再去修改/etc/fstab 文件,把它改回来就可以正常启动了。
在这里插入图片描述



在这里插入图片描述

不要指望修复,我们要做的是不出现错误!!






六.parted 命令分区,针对GPT分区表

当我们硬盘大于2T时必须用GPT分区表,分区时可以用parted命令来分区

我们 Linux 系统中有两种常见的分区表 MBR 分区表(主引导记录分区表)和 GPT 分区表(GUID 分区表),其中:

  1. MBR 分区表:支持的最大分区是 2TB(1TB=1024GB),超过2T的它也当做是2T;最多支持 4 个主分区,或 3 个主分区 1个扩展分区。MBR分区表基本到达了生命末尾,fdisk命令只识别MBR分区表
  2. GPT 分区表:支持最大 18EB 的分区(1EB=1024PB=1024*1024TB);最多支持 128 个分区,其中 1 个系统保留分区,127 个用户自定义分区。
  3. GPT中不再区分分区类型,可以把他们都当做主分区

不过 parted 命令也有点小问题,就是命令自身分区的时候只能格式化成 ext2 文件系统,不支持ext3 文件系统,那就更不用说 ext4 文件系统了(截止到 CentOS 6.8 还是这样,这里只是指不能用parted 命令把分区格式化成 ext4 文件系统,但是 parted 命令还是可以识别 ext4 文件系统的)。不过这没有太多的影响,因为我们可以先分区再用 mkfs 进行格式化嘛!




1.改之前一定要删/etc/fstab文件里的内容,不然下次系统会打不开。用fdisk删之前的分区倒问题没那么大(不过最好是把删掉之前建的分区),主要是要改自动挂载的文件

在这里插入图片描述



我们在这里暂时不删掉之前建的分区,之后可以把这些MBR分区转成GPT分区

新建分区顺序:fdisk→格式化→挂载→/etc/fstab

删除分区顺序:/etc/fstab→取消挂载(umount命令)→fdisk中删掉分区




2.开始操作

[root@localhost ~]# parted /dev/sdb
#打算继续划分/dev/sdb 硬盘
GNU Parted 2.1
使用 /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) ←parted 的等待输入交互命令的位置

在这里插入图片描述



在这里插入图片描述



在这里插入图片描述




在这里插入图片描述




3.建立分区

3.1 查看分区

(parted) print
#输入 print 指令 
Model: VMware, VMware Virtual S (scsi) ←硬盘参数,是虚拟机啊
Disk /dev/sdb: 21.5GB ←硬盘大小
Sector size (logical/physical): 512B/512B ←扇区大小
Partition Table: msdos ←分区表类型,就是 MBR 分区表
Number Start End Size Type File system 标志
1 32.3kB 5379MB 5379MB primary
2 5379MB 21.5GB 16.1GB extended
5 5379MB 7534MB 2155MB logical ext4
6 7534MB 9689MB 2155MB logical ext4
#看到了我们使用 fdisk 分的区,其中 1 分区没有格式化,2 分区是扩展分区不能格式化


在这里插入图片描述

上面的都是之前建的MBR分区(msdos代表的是MBR分区表),parted命令可以识别。
我们现在要用parted命令把他们转成GPT分区表

使用 print 可以查看分区表信息,包括硬盘参数,硬盘大小,扇区大小,分区表类型和分区信息。
分区信息总共七列,分别是:

  1. Number:分区号
  2. Start:分区起始位置,这里不再像 fdisk 用柱面表示,而是使用 Byte 更加直观
  3. End:分区结束位置
  4. Size:分区大小
  5. Type:分区类型
  6. File system:文件系统类型。我不是说 parted 不支持 ext4 文件系统吗?注意,我一直都是说 parted 不能直接把分区直接格式化成 ext4 文件系统,但是它是可以识别的。
  7. 标志:Flags,就是分区的标记




3.2 修改成GPT分区表

(parted) mklabel gpt 
#修改分区表命令 
警告: 正在使用 /dev/sdb 上的分区。 ←由于/dev/sdb 分区已经挂载,所以有警告
                                                		 ←注意如果强制修改,原有分区及数据会消失
忽略/Ignore/放弃/Cancel? ignore ←输入 ignore 忽略报错
警告: 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? yes ←输入 yes 
警告: WARNING: the kernel failed to re-read the partition table on /dev/sdb (设备或资源
忙). As a result, it may not reflect all of
your changes until after reboot. ←下次重启后,才能生效
(parted) print ←查看下分区表吧 
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt ←分区表已经变成 GPT
Number Start End Size File system Name 标志
						←所有的分区都消失了

在这里插入图片描述




在这里插入图片描述



注意重启前一定要把/etc/fstab 文件中和原有分区的内容删除掉




在这里插入图片描述

修改了分区表后,原有分区全部消失。所以如果分区并没有大于 2TB,那么修改分区表这一步是可以不执行的。



  1. 修改了分区表,如果这块硬盘已经有分区了,那么原有分区和分区中的数据都会消失,而且需要重启系统才会生效。

  2. 还有我们转换分区表的目的是为了支持大于 2TB 的分区,如果分区并没有大于 2TB,那么这步是可以不执行的。

注意:一定要把/etc/fstab 文件中和原有分区的内容删除掉,才能重启动。要不系统启动 就一定会报错的。





3.3 建立分区

因为修改过了分区表,所以/dev/sdb 中的所有数据都消失了,所以我们可以重新对这块硬盘分区了。不过建立分区时,默认文件系统就只能建立成 ext2 了,命令如下:

(parted) mkpart
#输入创建分区命令,后面不要参数,全部靠交互指定
分区名称? []? disk1        ←分区名称,我起名叫 disk1 
文件系统类型? [ext2]?    ←文件系统类型,直接回车,使用默认 ext2 
起始点? 1MB     ←分区从 1MB 开始 
结束点? 5GB     ←分区到 5GB 结束
#分区完成
(parted) print      ←查看下吧 
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt


在这里插入图片描述




在这里插入图片描述




在这里插入图片描述



不知道大家注意到了吗?我们现在的 print 查看的分区,和第一次查看 MBR 分区表的分区时有些不一样了,少了 Type 这个字段,也就是分区类型的字段,多了 Name 分区名字段。分区类型是标识主分区、扩展分区和逻辑分区的,不过这种标识只在 MBR 分区表中使用,我们现在已经变成了 GPT 分区表了,所以就不再有 Type 类型了。也就说折磨我们很久的主分区、扩展分区和逻辑分区的概念不再有用了,阿门!

起始点最好从1MB开始。注意要大于0
要新建第二个分区的话,第二个分区的起始点得大于第一个分区的结束点
GPT分区表中不区分主分区、扩展分区了,可以理解为所有分区都是主分区





3.4 建立文件系统(格式化)

分区分完了,我们还需要格式化。不过我们已经知道如果使用 parted 交互命令格式化的话,只能格式化成 ext2 文件系统。我们这里是要演示下 parted 命令的格式化方法,所以就格式化成 ext2吧,命令如下:

(parted) mkfs 
#格式化命令(很奇怪也是 mkfs,但是这只是 parted 的交互命令) 
WARNING: you are attempting to use parted to operate on (mkfs) a file system.
parted's file system manipulation code is not as robust as what you'll find in
dedicated, file-system-specific packages like e2fsprogs. We recommend
you use parted only to manipulate partition tables, whenever possible.
Support for performing most operations on most types of file systems
will be removed in an upcoming release.
警告: The existing file system will be destroyed and all data on the partition will be lost. 
Do you want to continue?
是/Yes/否/No? yes ←警告你格式化数据会丢失,没关系,已经丢失过了 
分区编号? 1 
文件系统类型? [ext2]? ←指定文件系统类型,写别的也没有用,直接回车 
 
(parted) print ←格式化完成,查看下 
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name 标志
1 1049kB 5000MB 4999MB ext2 disk1 ←拥有了文件系统

如果要格式化成 ext4 文件系统,请 mkfs 命令帮忙吧(注意不是 parted 交互命令中的 mkfs,而是系统命令 mkfs)!

在这里插入图片描述



在这里插入图片描述



fdisk -l 也可以查到分区
在这里插入图片描述



我们现在得用系统命令mkfs修改文件系统

mkfs -t ext4 /dev/sdb1

在这里插入图片描述



验证
在这里插入图片描述



3.5 然后挂载分区

mount /dev/sdb1 /gpt1

在这里插入图片描述



想要自动挂载的话则写入/etc/fstab

ls -l /dev/disk/by-uuid/
vi /etc/fstab

在这里插入图片描述



在这里插入图片描述







3.6 调整分区大小

调整分区大小有风险,要小心,可能会造成数据丢失。一定要先取消挂载分区,再调整分区大小
用parted调整分区大小有风险,而且命令又不完善,所以关于parted调整分区大小了解一下就行,用不太到
Linux下调整分区大小还是得用LVM

parted 命令还有一大优势,就是可以调整分区的大小(windows 中也可以实现,不过要不需要转换成动态磁盘,要不需要依赖第三方工具,如硬盘分区魔术师)。起始 Linux 中 LVM 和 RAID 是可以支持分区调整的,不过这两种方法也可以看成是动态磁盘方法,我们在下一个章节中介绍。使用 parted
命令调整分区要更加简单。

注意:分区一定要先取消挂载(也就是umount,而且还要删/etc/fstab里的内容),再调整分区大小。还有要调整大小的分区必须已经建立了文件系统(格式化),否则会报错

在这里插入图片描述
不能调整已挂载的分区



parted) resize
分区编号? 1 ←指定要修改的分区编号 
起始点? [1049kB]? 1MB ←分区起始位置 
结束点? [5000MB]? 6GB ←分区结束位置 
(parted) print ←查看下 
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name 标志
1 1049kB 6000MB 5999MB ext2 disk1 ←分区大小改变

在这里插入图片描述



在这里插入图片描述



在这里插入图片描述

对ext4的分区用parted调整大小相当于没调整,因为他会丢失数据




3.7 删除分区

(parted) rm 
#删除分区命令 
分区编号? 1 ←指定分区号 
(parted) print ←查看下 
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name 标志 ←分区消失

在这里插入图片描述





还有件事要注意,parted 中所有的操作都是立即生效,没有保存生效(fdisk里要按w保存生效)的概念(但也要重启)。这点和 fdisk 交互命令明显不同,所以所做的所有操作大家要倍加小心。

那么到底使用 fdisk 进行分区?还是 parted 命令呢?这个完全看个人习惯,我们更加习惯 fdisk命令。当硬盘不超过2T时,用fdisk命令,因为parted不太完善






七.分配swap分区

df看不到swap分区,用free -h(查内存的命令,-h是人性化显示)或fdisk -l可以看到

学过操作系统的都知道,swap是作为缓冲存在的,当内存满了的时候,用swap来替代

在这里插入图片描述

在虚拟机中swap基本不被消耗,在实际生产中,swap交换是无处不在的。我们可能会发现swap分的太少了,一下就被用完了。



在这里插入图片描述





7.1 分区,并修改为 swap 分区 ID

注意:我们之前学习parted命令的时候把分区表改成了GPT,现在得改回MBR,并重启系统



在这里插入图片描述
然后重启



在这里插入图片描述



[root@localhost ~]# fdisk /dev/sdb
#拿/dev/sdb 分区
Command (m for help): t ←修改分区的系统 ID
Selected partition 1 ←只有一个分区,所以不用选择分区了
Hex code (type L to list codes): 82 ←改为 swap 的 ID
Changed system type of partition 1 to 82 (Linux swap / Solaris)


在这里插入图片描述



在这里插入图片描述



在这里插入图片描述



在这里插入图片描述



保存退出
在这里插入图片描述





用逻辑分区做swap分区也可以,与上面同理





在这里插入图片描述



在这里插入图片描述



在这里插入图片描述



保存退出
在这里插入图片描述





7.2 格式化

swap是内核直接访问的,与普通分区格式化命令不太一样

[root@localhost ~]# mkswap /dev/sdb1 
Setting up swapspace version 1, size = 522076 KiB
no label, UUID=c3351dc3-f403-419a-9666-c24615e170fb

在这里插入图片描述



用free -h 确认一下
在这里插入图片描述







7.3 使用 swap 分区

使用swap前还是得回顾下free命令:

[root@localhost ~]# free 
 total used free shared buffers cached
Mem: 1030796 130792 900004 0 15292 55420
-/+ buffers/cache: 60080 970716
Swap: 2047992 0 2047992


在这里插入图片描述



[root@localhost ~]# swapon 分区设备文件名
/ / 这相当于挂载swap分区,不需要mount
例:
[root@localhost ~]# swapon /dev/sdb1


在这里插入图片描述



让 swap 分区开机之后自动挂载

/dev/sdb1 swap swap defaults 0 0 

#加入新 swap 分区的相关内容,我这里是直接使用的分区的设备文件名,大家当然也可以
#使用 UUID 号了。


在这里插入图片描述


注意挂载点就是swap,没有/,swap分区是让内核直接访问的
文件类型也直接写swap就行
而且第五列和第六列都是0!!!不需要备份


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值