磁盘使用三步曲
1.管理磁盘分区(创建分区)
2.创建文件系统(格式化分区)
3.挂载文件系统
磁盘结构
物理结构
- 磁头 每面一个磁头
- 盘片 磁盘有一个或多个盘片 每盘面2面
数据结构
- 扇区 是硬盘最小的存储单位 每扇区一般存放512字节数据
- 磁道 同一盘片不同半径的同心圆,磁头在盘片表面划出的圆形轨迹
- 柱面 不同盘片相同半径构成的圆柱面,由同一半径的圆的多个磁道组成
磁盘接口类型
IDE SATA SCSI SAS 光纤通道
硬盘存储容量 = 磁头数 x 磁道(柱面)x 每磁道扇区数 x 每扇区字节数
主引导记录MBR与磁盘分区
主引导记录Master Boot Record
主引导记录 (MBR: Master Boot Record)
MBR位于硬盘第一个物理扇区处
MBR中包含硬盘的主引导程序和硬盘分区表。MBR共512字节,前446字节为主引导程序,分区表保存在447-510字节中。
分区表有4个分区记录区,每个分区记录占16个字节
Linux将硬盘、分区等设备均表示为文件
磁盘分区结构
硬盘中的主分区数目只有4个
主分区和扩展分区的序号限制在1~4
扩展分区再分为逻辑分区逻辑分区的序号将始终从5开始
/dev/hda5
硬件设备所在目录hd IDE设备 sd SCSI设备 硬盘顺序号a,b,c... 分区顺序号1,2,3...
主启动记录(MBR)磁盘分区支持最大卷为2.2TB,
每个磁盘最多有4个主分区,或3个主分区和1个扩展分区。在扩展分区里面分多个逻辑分区
若需要更大的磁盘大小,则需要划分GPT磁盘而不是MBR
文件系统类型
XFS
存放文件和目录数据的分区
高性能的日志型文件系统,特别擅长于处理大文件,可支持上百万 TB的存储空间。
CentOS7系统中默认使用的文件系统
SWAP
为 Linux系统建立交换分区
一般设置为物理内存的1.5~2倍
Linux支持的其他文件系统
EXT4(CentOS7默认) FAT32 NTFS LVM
检测并确认新硬盘 fdisk lsblk scan
查看或管理磁盘分区
fdisk -l [磁盘]
等同
fdisk [磁盘]
-m p n d t w q
gdisk -l [磁盘]
#gdisk又叫GPT fdisk,是fdisk的延伸,主要使用的是GPT分区类型,用来划分容量大于2T的硬盘
Device(设备):分区的设备文件名称。
Boot:是否是引导分区。若是,则有”*"标识。
start:该分区在硬盘中的起始位置(柱面数)
End:该分区在硬盘中的结束位置(柱面数)Blocks:分区的大小,以 Blocks (块)为单位,默认的块大小为 1024 字节。
Id:分区对应的系统 ID 号。例如,83表示Linux中的XFS分区或EXT4分区、8e表示LVM逻辑卷
System:分区类型。
lsblk
也可以查看挂载情况
添加新磁盘
先在虚拟机中添加新的虚拟硬盘,为接下来操作准备
添加完磁盘可通过重启或者以下命令在线刷新
echo "- - -" > /sys/class/scsi_host/host0/scan
echo "- - -" > /sys/class/scsi_host/host1/scan
echo "- - -" > /sys/class/scsi_host/host2/scan
#0 1 2为第一个磁盘 第二个磁盘 第三个磁盘
再使用 fdisk -l 查看,显示新硬盘
1.管理磁盘分区(创建分区)MBR方式
fdisk /dev/sdb
#sdb:管理scsi硬盘—b硬盘
交互模式中的常用指令:
m:获取帮助菜单
n:新建分区
p:查看分区情况
d:删除分区
t:变更分区的类型w:保存分区操作并退出
q:不保存分区操作并退出
创建主分区
- fdisk /dev/sdb
- 输入n (创建分区)
- 输入p(创建主分区)[e为扩展分区,相当于外壳,逻辑分区需要依赖扩展分区]
- 输入分区号(1-4)
- 输入起始扇区(一般默认 直接回车)
- 输入最后扇区(若指定大小 输入 + [大小] K/M/G,默认全部分配
- 输入W保存
fdisk /dev/sdb 命令(输入 m 获取帮助):n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p 分区号 (1-4,默认 1):1 起始 扇区 (2048-41943039,默认为 2048): 将使用默认值 2048 Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+10G 分区 1 已设置为 Linux 类型,大小设为 10 GiB 命令(输入 m 获取帮助):W The partition table has been altered! Calling ioctl() to re-read partition table. 正在同步磁盘。
创建逻辑分区
- fdisk /dev/sdb
- 输入n(创建分区)
- 输入e(创建扩展分区)[e为扩展分区,相当于外壳,逻辑分区需要依赖扩展分区]
- 输入分区号(从5开始)
- 输入起始扇区(一般默认 直接回车)
- 输入最后扇区(若指定大小 输入 + [大小] K/M/G,默认全部分配)
- 输入n (创建分区)
- 输入l(创建逻辑分区)[只有创建扩展分区之后才能在扩展分区内创建逻辑分区]
- 输入分区号(从5开始)
- 输入起始扇区(一般默认 直接回车)
- 输入最后扇区(若指定大小 输入 + [大小] K/M/G,默认全部分配)
- 输入W保存
[root@xue xue]# fdisk /dev/sdb 欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 命令(输入 m 获取帮助):n Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): e 分区号 (2-4,默认 2): 起始 扇区 (20973568-41943039,默认为 20973568): 将使用默认值 20973568 Last 扇区, +扇区 or +size{K,M,G} (20973568-41943039,默认为 41943039): 将使用默认值 41943039 分区 2 已设置为 Extended 类型,大小设为 10 GiB 命令(输入 m 获取帮助):n Partition type: p primary (1 primary, 1 extended, 2 free) l logical (numbered from 5) Select (default p): l 添加逻辑分区 5 起始 扇区 (20975616-41943039,默认为 20975616): 将使用默认值 20975616 Last 扇区, +扇区 or +size{K,M,G} (20975616-41943039,默认为 41943039):+5G 分区 5 已设置为 Linux 类型,大小设为 5 GiB 命令(输入 m 获取帮助):w The partition table has been altered! Calling ioctl() to re-read partition table. 正在同步磁盘。
创建swap分区(需要更改分区格式)
- fdisk /dev/sdc
- 输入n (创建分区)
- 输入p(创建主分区)[e为扩展分区,相当于外壳,逻辑分区需要依赖扩展分区]
- 输入分区号(1-4)
- 输入起始扇区(一般默认 直接回车)
- 输入最后扇区(若指定大小 输入 + [大小] K/M/G,默认全部分配
- 输入t(更改分区格式)
- 输入L查看所有分区对应代码
- 输入82(Linux swap / Solaris)
- 输入W保存
在sdc时显示没有那个文件或目录,sdc刚刚在虚拟机添加还未刷新
使用echo "- - -" > /sys/class/scsi_host/host0/scan刷新
[root@xue xue]# fdisk /dev/sdc fdisk: 打不开 /dev/sdc: 没有那个文件或目录 [root@xue xue]# echo "- - -" > /sys/class/scsi_host/host0/scan [root@xue xue]# fdisk /dev/sdc 欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 Device does not contain a recognized partition table 使用磁盘标识符 0x0ffcd457 创建新的 DOS 磁盘标签。 命令(输入 m 获取帮助):n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p 分区号 (1-4,默认 1):1 起始 扇区 (2048-20971519,默认为 2048): 将使用默认值 2048 Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519):+5G 分区 1 已设置为 Linux 类型,大小设为 5 GiB 命令(输入 m 获取帮助):t 已选择分区 1 Hex 代码(输入 L 列出所有代码):L 0 空 24 NEC DOS 81 Minix / 旧 Linu bf Solaris 1 FAT12 27 隐藏的 NTFS Win 82 Linux 交换 / So c1 DRDOS/sec (FAT- 2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT- 3 XENIX usr 3c PartitionMagic 84 OS/2 隐藏的 C: c6 DRDOS/sec (FAT- 4 FAT16 <32M 40 Venix 80286 85 Linux 扩展 c7 Syrinx 5 扩展 41 PPC PReP Boot 86 NTFS 卷集 da 非文件系统数据 6 FAT16 42 SFS 87 NTFS 卷集 db CP/M / CTOS / . 7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux 纯文本 de Dell 工具 8 AIX 4e QNX4.x 第2部分 8e Linux LVM df BootIt 9 AIX 可启动 4f QNX4.x 第3部分 93 Amoeba e1 DOS 访问 a OS/2 启动管理器 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad 休 eb BeOS fs e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT f W95 扩展 (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/ 10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC 11 隐藏的 FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor 12 Compaq 诊断 5c Priam Edisk a9 NetBSD f4 SpeedStor 14 隐藏的 FAT16 <3 61 SpeedStor ab Darwin 启动 f2 DOS 次要 16 隐藏的 FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS 17 隐藏的 HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE 18 AST 智能睡眠 65 Novell Netware b8 BSDI swap fd Linux raid 自动 1b 隐藏的 W95 FAT3 70 DiskSecure 多启 bb Boot Wizard 隐 fe LANstep 1c 隐藏的 W95 FAT3 75 PC/IX be Solaris 启动 ff BBT 1e 隐藏的 W95 FAT1 80 旧 Minix Hex 代码(输入 L 列出所有代码):82 已将分区“Linux”的类型更改为“Linux swap / Solaris” 命令(输入 m 获取帮助):w The partition table has been altered! Calling ioctl() to re-read partition table. 正在同步磁盘。
1.管理磁盘分区(创建分区)GPT方式 gdisk parted
gdisk
与上方fdisk操作相似
parted
parted [选项] [硬盘 [命令]]
1、查看系统分区表信息
parted /dev/sdc print
2、创建分区
parted [硬盘] mkpart 分区类型 文件系统类型 开始 结束
parted /dev/sdc mkpart primary ext3 1 2G ext3的主分区,从磁盘的第1MB开始分区,到2GB的位置,大小为2GB的主分区 parted /dev/sdc mkpart primary ext3 2G 4G创建 创建一个容量为2GB的分区,从硬盘的第2个GB位置开始分区,到第4个GB的位置结束
3、修改分区表格式
parted /dev/sdc mklabel gpt
4、删除分区
parted /dev/sdc rm2使用
2.创建文件系统(格式化分区)
mkfs 主分区 逻辑分区 Make Filesystem创建文件系统(格式化分区)
ls /sbin/mkfs* 查看支持的文件格式
mkfs -t 文件系统类型 分区设备
将sdb2(主分区)设置为XFS文件系统
mkfs -t xfs /dev/sdb1 文件系统格式XFS(EXT4 FAT32 NTFS) (sb)scsi设备 (b)第二块磁盘 (1)第一个分区
将sdb5(逻辑分区)设置为ext4文件系统
mkfs -t ext4 /dev/sdb5 将sdb5(逻辑分区)设置为ext4文件系统
sdb2不可格式化!sdb2在之前设置为扩展分区,相当于一个外壳,里面存放逻辑分区。
扩展分区sdb2中的逻辑分区sdb5有实体才可以格式化
mkswap 交换分区 Make swap 创建交换文件系统
mkswap 分区设备
将sdc1(swap分区)设置为swap文件系统
mkswap /dev/sdc1
变更硬盘(特别是正在使用的硬盘)的分区设置以后,建议最好将系统重启一次,或者执行"partprobe"命今使操作系统检测新的分区表情况。以防格式化分区时损坏硬盘中已有的数据。
创建文件系统创建文件系统的过程即格式化分区的过程mkfs -t xfs /dev/sdb1mkfs.xfs /dev/sdb1
创建交换文件系统创建swap之前,目标分区应先通过fdisk 工具将分区类型ID 号设为 82
3.挂载文件系统
mount 挂载文件系统
mount [-t 类型] 存储设备 挂载点目录 mount -o loop ISO镜像文件 挂载点目录 #-t可省略 系统自动识别
mkdir /guazaidian mount /dev/sdb1 /guazaidian/ #将sdb1分区挂载到guazaidian
swap分区不用mount挂载使用swapon,下文提及
umount 卸载文件系统
umount 存储设备位置 umount 挂载点目录
若出现无法解挂的现象,可按照以下方法处理或
fuser -mv /data或者lsof +d /data
umount -lf /data
注意:mount挂载覆盖源文件夹 / 原理
mount挂载文件系统原理为在磁盘1的文件夹中覆盖挂载磁盘2,例如蒸包子的梯笼 一层盖一层
若同名文件夹存有文件,在挂载后只会显示磁盘2中的文件,挂载时对文件夹的写入在磁盘2中起作用。
当卸载后才会重新显示磁盘1文件夹的文件,此时对文件夹的操作写入磁盘1。
若挂载有指定设备,写入指定设备中,若没有,写入根目录挂载的设备中(当前系统的磁盘)
注意:mount重启失效,永久挂载方法/etc/fstab
重启后mount挂载会失效,若要每次开机都挂载,需要写入/etc/fstab文件
vim /etc/fstab
第1字段:设备名或设备卷标名 (UUID=***或者/dev/sdb1)
UUID查询 blkid
第2字段:文件系统的挂载点目录的位置。
第3字段:文件系统类型,如xfs、swap 等。(光盘iso9660)
第4字段:挂载参数,即mount命令"-o"选项后可使用的参数。例如,defaults (默认参数)、W (可读写)、O(只读)、noexec (禁用执行程序)一般设为1时表示需要,设为0时将被dump 忽略
第5字段:表示文件系统是否需要 dump 备份 (dump 是一个备份工具)
第6字段:该数字决定在系统启动时进行磁盘检查的顺序。0表示不进行检查,1表示优先检查,2表示其次检查。根分区可设为1,其他分区设为2。
(5 6字段面试可能问 第五个0是不备份 第六个0是不检查磁盘)
增加永久挂载方法1/etc/fstab
增加一条/dev/sdb1 用于永久挂载
增加一条UUID=17a3c730-66af-4388-a2a6-4189e7c7f3ab (sdb5)用于永久挂载
增加一条/dev/sr0(光驱) 用于永久挂载
/dev/sdb1 /guazaidian xfs defaults 0 0 UUID=17a3c730-66af-4388-a2a6-4189e7c7f3ab /guazaidian2 ext4 defaults 0 0 /dev/sr0 /mnt iso9660 defaults 0 0
mount-a 重新加载fstab中内容,不报错则通过 lsblk 查看挂载信息,挂载成功。
如果/etc/fstab文件修改错误(例如挂载了sr0但是光驱内没有文件),重新启动将无法开机!做好备份,或是修改配置
增加永久挂载方法2/etc/profile, ~/.bash_profile
由于/etc/profile(全局),~/.bash_profile(用户家目录)开机自动执行,可将挂载指令加入其中。
vim /etc/profile 或者 vim ~/.bash_profile 加入命令 mount /dev/sdb1 /guazaidian/
增加永久挂载方法3/etc/rc.local
/etc/rc.local是开机自动执行指令的文件
vim /etc/rc.local 加入命令 mount /dev/sdb1 /guazaidian/
若要rc.local生效,需要先执行chmod +x /etc/rc.d/rc.local 指令!
chmod +x /etc/rc.d/rc.local #给该文件添加执行权限 ll !$ !$ 为通配符 自动匹配上一条命令的末尾字段 此处查看re.local权限
df 检查挂载点
df
#检查挂载点
df -h
#检查挂载点 人性化显示大小df -hT
#检查挂载点 人性化显示大小 显示文件系统类型
swapon挂载swap交换分区
swapon /dev/sdc1 swapoff /dev/sdc1 swapoff -a #关闭所有swap swapon -s #查看当前swap提供设备
free 查看内存
free -m MB单位显示显示内存 free 显示内存 free -h 人性化显示内存MB,GB
free -m什么意思? 按MB显示内存(重中之重)
检测磁盘 是否损坏
badblocks -sv /dev/sda1