1)低级格式化
所谓低级格式化,就是将空白磁盘划分出柱面和磁道,再将磁道划分为若干个扇区,每个扇区又划分出标识区、间隔区(GAP)和数据区等。
2)磁盘分区
磁盘在系统中使用都必须先进行分区,然后建立文件系统,才可以存储数据。分区也有助于更有效地使用磁盘空间。每一个分区在逻辑上都可以视为一个磁盘。
3)高级格式化
磁盘分区在作为系统使用之前还需要进行初始化,并将记录数据结构写到磁盘上这个过程就是高级格式化,实际上就是在磁盘分区上建立相应的文件系统,对磁盘的各个分区进行磁道格式化,在逻辑上划分磁道。
在Linux中,设备文件名用字母表示不同的设备接口,例如a表示第1个接口,字母b表示第2个接口,磁盘设备也不例外。
IDE硬盘(包括光驱设备)由内部链接来区分,最多可以连接4个设备。/dev/hda表示第1个IDE通道(IDE1)的主设备(master),/dev/hdb表示第1个IDE通道的从设备(slave)。按照这个原则,/dev/hdc和/dev/hdd为第2个IDE通道(IDE2)的主设备和从设备。
原则上SCSI、SAS、SATA、USB接口硬盘的设备文件名均以/dev/sd开头。这些设备命名依赖于设备的ID号码,不考虑遗漏的ID号码。例如3个SCSI设备的ID号码分别是0、2、5,设备名分别是/dev/sda、/dev/sdb和/dev/sdc。如果再添加一个ID号码为3的设备,则这个设备将被以/dev/sdc来命名,ID号码为5分设备将被改称为/dev/sdd/
1.分区样式:MBR与GPT
MBR:最多可支持4个磁盘分区,可通过扩展分区来支持更多的逻辑分区,在Linux中将该分区样式又称为MSDOS。
GPT:磁盘内最多可以创建128个主分区,不必创建扩展分区和逻辑分区。
MBR分区的容量限制是2TB,GPT分区可以突破MBR的2TB容量限制,特别适合大于2TB的硬盘分区。
2.磁盘分区命名
在Linux中,磁盘分区的文件名需要在磁盘设备文件名的基础上加上分区编号。这样,IDE硬盘分区采用/dev/hdxy这样的形式命名。SCSI、SAS、SATA、USB硬盘分区采用/dev/sdxy这样的形式命名,其中x表示设备编号(从a开始),y是分区编号(从1开始)。例如,第一块SCSI硬盘的主分区为sda1,扩展分区为sda2,扩展分区下的一个逻辑分区为sda5(从5开始采用来为逻辑分区命名)。
ext是Extented FIle System(扩展文件系统)的简称,一直是Linux首选的文件系统格式,在过去较长一段时间里,ext3是Linux操作系统的主流文件系统格式,Linux内核自2.6.28版开始正式支持新的系统文件ext4.
ext4的主要特点如下:
1)分区类型:Linux Native与Linux Swap
Linux Native分区
Linux Native分区是存放系统文件的地方,只能使用ext文件系统。根(/)分区是其中一个非常特殊的分区,它是整个操作系统的根目录,在安装操作系统时创建。与Windows不同,Linux操作系统可以安装到多个数据分区中,然后通过挂载(mount)的方式把它们挂载到不同的文件系统中进行使用。如果安装过程中指定了根分区,而没有其他数据分区,那么操作系统中的所有文件都将全部安装到根分区下。
创建/boot分区是非常必要的,它包含了操作系统的内核和在启动系统过程中所要用到的文件,如果有一个单独的/boot启动分区,即使主要的根分区出现了问题,计算机依然能够启动。这个分区的大小在50~100MB之间。另外,还可根据情况创建/usr分区(存放软件,应尽可以分配大的空间)、/home分区(用户主目录所在地,大小取决于有多少用户,尤其适合多用户),/tmp分区(存放临时文件,适合多用户系统或者网络服务器)等。
Linux Swap分区
Swap分区是Linux暂时存储数据的交换分区,它主要用于保存物理内存上暂时不用的数据,在需要的时候再调进内存。可以将其理解为与Windows的虚拟内存一样的技术,区别是在Windows下只需要在分区内划出一块固定大小的磁盘空间作为虚拟内存,而在Linux中则需要专门划出一个分区来存放内存数据。一般情况下,Swap分区应该大于或等于物理内存的大小。建议物理内存在2GB以下时,Swap分区的大小为物理内存的2~2.5倍,如果物理内存在2GB以上,则Swap分区的大小设为与物理内存大小相同即可。可以创建和使用多个交换分区,但最多16个。
2)规划磁盘分区
理论上在硬盘空间足够时可以建立任意数量的分区(挂载点),但在实际应用中很少需要大量分区。
以主流的MBR分区为例,一个硬盘可以划分4个区,可以是3个主要分区和一个扩展分区,而扩展分区里可以划分若干个逻辑分区,扩展分区本身不能存储任何东西,也不能格式化成文件系统,只能用于划分逻辑分区。
规划磁盘分区,需要考虑磁盘的容量、系统的规模与用途、备份空间等。
Linux系统磁盘最基本的分区只需要两个,一个根分区(/)和一个Swap分区。Swap分区大小一般为物理内存的两倍。
为提高可靠性,系统磁盘可以考虑增加一个引导分区(/boot)。引导分区只是安装启动器(引导文件)的一个分区,而真正的引导是在根目录下。/boot分区大概100MB,位于磁盘的最前面,目的是防止主板太旧、硬盘太大等问题而导致的无法开机。引导分区不是必需的,如果没有创建引导分区,引导文件就安装在根分区中。
如果磁盘空间很大,可以按用途划分多个分区,如/home分区主要用于存放个人数据,/tmp分区用于存放临时文件。分区数量多,就要考虑建立扩展分区,在扩展分区划分逻辑分区。如果安装有多个硬盘,根据需要划分独立的分区。
分区无论是在系统磁盘上,还是非系统磁盘上,最好都挂载到根目录下使用。
3)磁盘分区工具
命令行工具可以使用fdisk和parted。fdisk是各种Linux发行版本中最常用的分区工具,使用灵活,简单易用。parted功能更加强大,支持的分区类型非常多,而且可以调整原有分区尺寸,只是操作复杂一些。
Ubuntu提供一个基于文本窗口界面的分区工具cfdisk,它比fdisk的操作更为直观,但与真正的图形界面还是逊色一些。在命令行中执行sudo cfdisk命令可以打开其主界面。默认对第一个磁盘进行分区,如果要对其他磁盘分区,执行命令时需要加上该磁盘设备名作为操作参数。
4)磁盘分区准备
磁盘分区操作容易导致数据丢失,建议对重要数据进行备份之后再进行分区操作。
在实际使用过程中,可能需要添加或者更换新磁盘。要安装新的磁盘(热插拔硬盘除外),首先要关闭计算机,按要求把磁盘安装到计算机中,重启计算机,进入Linux操作系统后可执行dmesg命令查看新添加的磁盘是否已被识别,然后再进行分区操作。
主要步骤:
1)fdish简介
fdisk可以在两种模式下运行:交互式和非交互式。
格式:fdisk [选项] <磁盘设备名> 用于改变分区表(创建和修改分区)
fdisk [选项] -l [<磁盘设备名>] 用于列出当前分区表,如果不带磁盘参数将列出当前所有磁盘的分区信息。
主要选项说明:
2)查看现有分区
linx@ubuntu:~$ sudo fdisk -l
Disk /dev/sda:20 GiB,21474836480 字节,41943040 个扇区
Disk model: VMware Virtual S
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0dcab4f7
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/sda1 * 2048 1050623 1048576 512M b W95 FAT32
/dev/sda2 1052670 41940991 40888322 19.5G 5 扩展
/dev/sda5 1052672 41940991 40888320 19.5G 83 Linux
3)创建分区
linx@ubuntu:~$ sudo fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.34)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
设备不包含可识别的分区表。
创建了一个磁盘标识符为 0x02487824 的新 DOS 磁盘标签。
命令(输入 m 获取帮助): n
分区类型
p 主分区 (0个主分区,0个扩展分区,4空闲)
e 扩展分区 (逻辑分区容器)
选择 (默认 p): p
分区号 (1-4, 默认 1):
第一个扇区 (2048-41943039, 默认 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-41943039, 默认 41943039): +5G
创建了一个新分区 1,类型为“Linux”,大小为 5 GiB。
命令(输入 m 获取帮助): p
Disk /dev/sdb:20 GiB,21474836480 字节,41943040 个扇区
Disk model: VMware Virtual S
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x02487824
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/sdb1 2048 10487807 10485760 5G 83 Linux
命令(输入 m 获取帮助): w
分区表已调整。
将调用 ioctl() 来重新读分区表。
正在同步磁盘。
命令(输入 m 获取帮助): m
帮助:
DOS (MBR)
a 开关 可启动 标志
b 编辑嵌套的 BSD 磁盘标签
c 开关 dos 兼容性标志
常规
d 删除分区
F 列出未分区的空闲区
l 列出已知分区类型
n 添加新分区
p 打印分区表
t 更改分区类型
v 检查分区表
i 打印某个分区的相关信息
杂项
m 打印此菜单
u 更改 显示/记录 单位
x 更多功能(仅限专业人员)
脚本
I 从 sfdisk 脚本文件加载磁盘布局
O 将磁盘布局转储为 sfdisk 脚本文件
保存并退出
w 将分区表写入磁盘并退出
q 退出而不保存更改
新建空磁盘标签
g 新建一份 GPT 分区表
G 新建一份空 GPT (IRIX) 分区表
o 新建一份的空 DOS 分区表
s 新建一份空 Sun 分区表
命令(输入 m 获取帮助): n
4)修改分区类型
新增分区时,系统默认的分区类型为Linux Native,对应的代码为83。如果要把其中的某些分区改变为其他类型,如Linux Swap或FAT32等,则可以在fdisk命令的交互模式下通过命令t来完成。执行t命令改变分区类型时,系统会提示用户要改变哪个分区,改变为什么类型(输入分区类型号码)。可执行l命令查询Linux所支持的分区类型号码及其对应的分区类型。改变分区类型结束后,执行命令保存并且退出。
5)删除分区
要删除分区,可以在fdisk的交互模式下执行d命令,指定要删除的分区编号,最后执行w命令使之生效。如果删除扩展分区,则扩展分区上的所有逻辑分区都会被自动删除。
注意不要删除Linux系统的启动分区或根分区。删除分区之后,余下的分区的编号会自动调整,如果被删除的分区在Linux启动分区或根分区之前,可能导致系统无法启动,这时需要修改GRUB配置文件。
6)保存分区修改结果
要使磁盘分区的任何修改(如创建新分区、删除已有分区、更改分区类型)生效,必须执行w命令保存修改结果,这样在fdisk中所做的所有操作都会生效,且不可回退。如果分区表正忙,还需要重启计算机后才能使新的分区表生效。只要执行q命令退出fdisk,则当前所有操作均不会生效。
对于正处于使用状态(被挂载)的磁盘分区,不能删除,也不能修改分区信息。建议对在用的分区进行修改之前,首先备份该分区上的数据。
1)查看文件系统类型
linx@ubuntu:~$ sudo file -s /dev/sda5
/dev/sda5: Linux rev 1.0 ext4 filesystem data, UUID=2aa4d0a8-0cc8-47ce-b56d-c6975c1a9ccb (needs journal recovery) (extents) (64bit) (large files) (huge files)
以上显示该分区采用ext4文件系统。再来检查新创建的分区/dev/sdb1,可以发现没有进行格式化
linx@ubuntu:~$ sudo file -s /dev/sdb1
/dev/sdb1: data
2)使用mkfs创建文件系统
格式:mkfs [选项] [-t 文件系统类型] [文件系统选型] 磁盘设备名 [大小]
linx@ubuntu:~$ sudo mkfs -t ext4 /dev/sdb1
mke2fs 1.45.5 (07-Jan-2020)
创建含有 1310720 个块(每块 4k)和 327680 个inode的文件系统
文件系统UUID:b25f72e1-3ca4-4ee7-a962-cd0c6a0ab4fb
超级块的备份存储于下列块:
32768, 98304, 163840, 229376, 294912, 819200, 884736
正在分配组表: 完成
正在写入inode表: 完成
创建日志(16384 个块) 完成
写入超级块和文件系统账户统计信息: 已完成
#可以使用file命令检查
linx@ubuntu:~$ sudo file -s /dev/sdb1
/dev/sdb1: Linux rev 1.0 ext4 filesystem data, UUID=b25f72e1-3ca4-4ee7-a962-cd0c6a0ab4fb (extents) (64bit) (large files) (huge files)
对于新建立的文件系统,可以使用选项-f强制检查
linx@ubuntu:~$ sudo fsck -f /dev/sdb1
fsck,来自 util-linux 2.34
e2fsck 1.45.5 (07-Jan-2020)
第 1 步:检查inode、块和大小
第 2 步:检查目录结构
第 3 步:检查目录连接性
第 4 步:检查引用计数
第 5 步:检查组概要信息
/dev/sdb1:11/327680 文件(0.0% 为非连续的), 42078/1310720 块
3)使用卷标和UUID表示文件系统
#创建卷标
linx@ubuntu:~$ sudo mkfs.ext4 -L DATA /dev/sdb1
mke2fs 1.45.5 (07-Jan-2020)
/dev/sdb1 有一个 ext4 文件系统
创建于 Wed Mar 31 03:46:07 2021
无论如何也要继续?(y,N) y
创建含有 1310720 个块(每块 4k)和 327680 个inode的文件系统
文件系统UUID:5dbe0efc-cccc-4204-8cdd-87c1ee8b4349
超级块的备份存储于下列块:
32768, 98304, 163840, 229376, 294912, 819200, 884736
正在分配组表: 完成
正在写入inode表: 完成
创建日志(16384 个块) 完成
写入超级块和文件系统账户统计信息: 已完成
e2label 设备名 [新卷标]
如果不提供卷标参数,将显示分区卷标;如果指定卷标参数,将改变其卷标
linx@ubuntu:~$ sudo e2label /dev/sdb1
DATA
也可以使用这个命令设置卷标:tune2fs -L 卷标 设备名
#查看当前系统中所有已挂载文件系统的UUID、卷标和文件系统类型
linx@ubuntu:~$ sudo blkid
/dev/sda5: UUID="2aa4d0a8-0cc8-47ce-b56d-c6975c1a9ccb" TYPE="ext4" PARTUUID="0dcab4f7-05"
/dev/sdb1: LABEL="DATA" UUID="5dbe0efc-cccc-4204-8cdd-87c1ee8b4349" TYPE="ext4" PARTUUID="02487824-01"
/dev/sda1: UUID="FC61-38EF" TYPE="vfat" PARTUUID="0dcab4f7-01"
/dev/loop0: TYPE="squashfs"
/dev/loop1: TYPE="squashfs"
/dev/loop2: TYPE="squashfs"
/dev/loop3: TYPE="squashfs"
/dev/loop4: TYPE="squashfs"
/dev/loop5: TYPE="squashfs"
/dev/loop6: TYPE="squashfs"
/dev/loop7: TYPE="squashfs"
/dev/loop8: TYPE="squashfs"
/dev/loop9: TYPE="squashfs"
/dev/loop10: TYPE="squashfs"
#重置系统的UUID
linx@ubuntu:~$ sudo tune2fs -U random /dev/sdb1
#清除系统UUID
linx@ubuntu:~$ sudo tune2fs -U clear /dev/sdb1
1)挂载文件系统
2)手动挂载文件系统
格式:mount [-t 文件系统类型] [-L 卷标] [-o挂载选项] 设备名 挂载点目录
#创建一个挂载点目录
linx@ubuntu:~$ sudo mkdir /usr/mydoc
[sudo] linx 的密码:
#将/dev/sdb1挂载到/usr/mydoc
linx@ubuntu:~$ sudo mount /dev/sdb1 /usr/mydoc
linx@ubuntu:~$ mount
#省略其他文件系统
/dev/sdb1 on /usr/mydoc type ext4 (rw,relatime)
3)自动挂载文件系统
4)/etc/mtab配置文件
5)卸载文件系统
1)使用fsck检验并修复文件系统
2)使用df检查文件系统的磁盘空间占用情况
3)使用du查看文件和目录的磁盘使用情况
4)将ext3文件系统转换为ext4文件系统
1)备份内容
在Linux操作系统中,按照要被备份的内容,备份分为系统备份和用户备份。系统备份就是对操作系统和应用程序的备份,便于在系统崩溃以后能快速、简单、完全地回复系统的运行。最有效的方法是仅仅备份那些对于系统崩溃后恢复所必需的数据。用户备份不同系统备份,原因是用户的数据变动更加频繁一些,当备份用户数据时,只是为用户提供一个虚拟的安全网络空间,合理地放置最近用户数据文件的备份,当出现任何问题时,如误删除某些文件或者硬盘发生故障时,用户可以恢复自己的数据。用户备份应该比系统备份更加频繁,可采用自动定期运行某个程序的方法来备份数据。
2)备份策略
3)备份规划
1)使用tar命令进行存档
格式:tar [选项] 档案文件 文件或目录列表
linx@ubuntu:~$ tar -czvf linxbak.tar /home/linx
#要恢复使用tar命令备份过的文件(解开档案文件),可使用选项-x
linx@ubuntu:~$ tar -xzvf linxbak.tar
2)使用dd命令进行存档
dd是一种文件转移命令,用于复制分件,并在复制的同时进行指定的转换和格式处理,如果转换取决于选项和参数。它使用if选项指定输入端,of选项指定输入端。
dd常用来制作光盘映像(光盘必须是iso9660格式)
linx@ubuntu:~$ dd if=/dev/cdrom of=cdrom.iso
由于dump和restore命令的出现,dd比较少用了。
使用工具需要对工具进行下载
linx@ubuntu:~$ sudo apt install dump
linx@ubuntu:~$ sudo apt install restore
1)使用dump命令备份
#统计完全备份/dev/sda1所需空间,以防磁带或磁盘空间不足。级别0表示完全备份,选项-s表示统计备份所需空间。
linx@ubuntu:~$ dump -0s /dev/sda1
#选项-f指定备份文件的路径和名称,-u表示更新数据库文件/etc/dumpdates(将文件的日期、存储级别、文件系统等信息都记录下来)
linx@ubuntu:~$ dump -0u -f /tmp/boot.dump /boot
#要实现增量备份,第1次备份时可选择级别0,以后每次做增量备份时,就可以依次使用级别1、级别2、级别3
linx@ubuntu:~$ dump -0u -f /tmp/boot.dump /boot
linx@ubuntu:~$ dump -1u -f /tmp/boot1.dump /boot
linx@ubuntu:~$ dump -2u -f /tmp/boot2.dump /boot
linx@ubuntu:~$ dump -3u -f /tmp/boot3.dump /boot
#要实现差异备份,可先选择级别0做完整备份,然后每次都使用大于0的同一级别。如每次都使用级别1。
linx@ubuntu:~$ dump -0u -f /tmp/boot.dump /boot
linx@ubuntu:~$ dump -1u -f /tmp/boot1.dump /boot
linx@ubuntu:~$ dump -1u -f /tmp/boot2.dump /boot
linx@ubuntu:~$ dump -1u -f /tmp/boot3.dump /boot
#dump可以将备份存储在磁带上。Linux通常用/dev/st0代表倒带设备,而用/dev/nst0代表非倒带设备
linx@ubuntu:~$ dump 0f /dev/nst0 /boot
2)使用restore命令恢复
#恢复数据之前,要浏览备份文件中的数据,可以使用如下命令(-t选项表示查看)
linx@ubuntu:~$ restore -tf /tmp/boot.dump
#要恢复一个备份,可以使用如下命令(-r选项表示重建)
linx@ubuntu:~$ restore -rf /tmp/boot.dump
#使用以下命令进入交互式恢复模式。
linx@ubuntu:~$ restore -if /tmp/boot.dump
#要将/home目录的数据备份到光盘映像文件中
#在/tmp目录中建立一个home.iso的映像文件。包含/home目录的所有内容。 -r表示支持长文件名 -o表示输出
linx@ubuntu:~$ mkisofs -r -o /tmp/home.iso /home
#除了使用mkisofs命令,还可以使用dd命令建立光盘映像
#if参数指定输入文件(if参数必须是文件,而不能时一个目录) of参数指定输出文件
linx@ubuntu:~$ dd if=/dev/cdrom of=/tmp/home.iso
刻录机在Linux中被识别为SCSI设备,即使该设备实际上是IDE设备。在实际刻录光盘之前,可以使用以下命令对刻录设备进行检测,获取光盘刻录机的SCSI设备识别号以便在刻录光盘的工具中使用
linx@ubuntu:~$ cdrecord -scanbus
格式:cdrecord -v -eject
#-eject表示刻录完毕弹出光盘。
linx@ubuntu:~$ cdrecord -v dev=/dev/cdrom /tmp/home.iso