linux运维笔记:Linux磁盘分区
1-Linux里面的分区工具
fdisk 主要是给磁盘小于2T(只能出来分区表是mbr的)
parted 主要是给磁盘大于2T(gpt)
2-磁盘分区重点
1) 给磁盘分区的实质就是针对 0 磁头 0 磁道 1 扇区后面接下来的 64bytes 的区分表进行设置,
即主要是划分起始以及结束磁头号、扇区号及柱面号
2) 给磁盘分区的工具有 fdisk(适合个小于 2T 的磁盘分区), parted(擅长给大于 2T 的磁盘分区,
也可以对于小于 2T 的磁盘分区),实际中小于 2T 的是首选 fdisk28
3) 一块磁盘的分区表仅有 64 个 bytes 大小,每个分区表要占用 16 个字节,因此一块磁盘仅支
持 4 个分区表信息,即主分区+扩展分区总量不超过 4 个
4) 磁盘分区是按照柱面( cyinder)来划分的
5) 扩展分区不能直接使用的,还要在扩展分区的基础上创建逻辑分区才行
6) 扩展分区有自己的分区表,因此,扩展分区下面的逻辑分区可以有多个
3-主分区 Primary
一般来说, 主分区是磁盘上必须存在的分区,一般为磁盘的第一个分区,我们可以在主分区上安装操作系统。
1p+1e,2p+1e,3p+1e
我们前面装系统:
/boot 主分区(系统分区)
Swap 主分区(交换分区)
/ 主分区(根分区)
4-扩展分区 Extended
扩展分区不能算是一个正常的分区,而是一个链接,起到一个指向作用。由于扩展分区没有 MBR以及 64bytes 限制, 所以我们可以在扩展分区内再建立多个逻辑分区一块硬盘只能存在一个扩展分区,并且扩展分区不能直接存放数据,扩展分区受限于操作系统。
5-逻辑分区 logical
不能在磁盘中单独直接划分逻辑分区,逻辑分区必须存在于扩展分区内,在扩展分区内可以划分多个逻辑分区,逻辑分区的编号是从数字 5 开始的。
IDE 磁盘大概编号可以是 5-63
STAT 编号 5-15
实际运用:主分区和逻辑分区都可以用。一般系统安装用主分区,存放数据也可以。
6-磁盘分区注意事项要点
一块磁盘的分区方式只能为如下组合之一:
1)任意多主分区,但要求 1≤主分区数量≤4
2) 扩展分区可以和主分区组合,但要求 2≤(主分区+扩展分区)数量≤4
3) 如果要分成四个磁盘分区的话,那么最多就是可以:
P+P+P+P
P+P+P+E
其中的 P 为 Primary,E 为 Extended
说明:
1) 扩展分区不是一个真正的可用分区,建立完扩展分区后,还需要在扩展分区上面建立逻辑分区才可以使用。
2) 对于主分区和逻辑分区在一般的数据存储使用上是没有区别的(对于大多数的数据存储),在安装操作系统时第一个分区要选主分区。
3) 分区数字编号 1~4 留给主分区或扩展分区使用,逻辑分区编号只能从 5 开始,即时 1~4 分区号有剩余,也不会分配给逻辑分区。
4) 对硬盘分区,实际上就是在修改硬盘分区表,也就是说我们通过 fdisk 分区实际上就是在改64 字节分区表,分区和对应的数据没有关系。因此,理论上,调整分区大小,不会删除分区数据。
特殊说明:磁盘也可以不分区,字节格式化使用,但是不推荐。
7-硬盘分区的设备名
在 linux 系统中,是通过设备名来访问设备的,设备名存放在“ /dev”目录中
设备名的定义规则如下,其他的分区可以以此类推:
系统的第一块 IDE 接口的硬盘称为/dev/hda
系统的第二块 IDE 接口的硬盘称为/dev/hdb
系统的第一块 SCSI 接口的硬盘称为/dev/sda
系统的第二块 SCSI 接口的硬盘称为/dev/sdb
STAT,SAS 都是 sd 开头
每个分区则使用磁盘名称加对应的数字编号表示:
系统第一块 IDE 接口硬盘的第 1 个分区称为/dev/hda1
系统第一块 IDE 接口硬盘的第 5 个分区称为/dev/hda5
系统第一块 SCSI 接口硬盘的第 1 个分区称为/dev/sda1
系统第一块 SCSI 接口硬盘的第 5 个分区称为/dev/sda5
注意事项:
1) 分区数字编号 1~4 留给主分区或扩展分区使用,逻辑分区编号只能从 5 开始
2) IDE 硬盘设备名均以/dev/hd 开头,不同硬盘编号一次为/dev/hda、 /dev/hdb、 /dev/hdc…
3) SCSI/SAS/STAT/USB 接口硬盘的设备名均以/dev/sd 开头,不同硬盘编号依次为/dev/sda、/dev/sdb、 /dev/sdc …
4) 特别强调: SAS/STAT 为当前互联网生产环境主流硬盘接口,SSD 固态硬盘,由于是电子设备,性能很高,也逐渐被运用
5) Linux 环境下没有盘符概念,要对磁盘设备进行操作,需要使用磁盘设备名;读取磁盘设备内容,需要把创建在分区或逻辑卷上的文件系统挂载到指定目录上
8-企业面试题。
企业面试题1:
我有一块 SAS 硬盘,我想把磁盘分成 6 个可以使用的磁盘分区,那么每个磁盘分区在 linux系统下的数字编号是多少?
说明:
由于硬盘主分区+扩展分区最多可以有 4 个,因此,在 linux 系统下,会默认将 1~4 的分区编号和扩展分区不可以占用 1~4 分区编号。
如果是 1p+1e,则分区编号为:
/dev/sda1,/dev/sda5,/dev/sda6,/dev/sda7,/dev/sda8,/dev/sda9
如果是 2p+1e,则分区编号为:
/dev/sda1, /dev/sda2, /dev/sda5,/dev/sda6,/dev/sda7,/dev/sda8
如果是 3p+1e,则分区编号为:
/dev/sda1,/dev/sda2, /dev/sda3, /dev/sda5, /dev/sda6, /dev/sda7
企业面试题2:
一台服务器 6 块 600G 的磁盘, RAID 5 后,总大小 3T,此时无法装系统?请问为什么?
解决方法:
1) 做 RAID 5 后,不要重启装系统,而是在 RAID 界面,继续分 1 个小的虚拟磁盘 VD 200G,用这个 200G 的虚拟磁盘装系统,装完系统后再把剩余的 2.8T 分区通过 parted
2) 先拿 1 块盘做 RAID 0,剩下的 5 块再做 RAID 5,在 RAID 0 装系统
3) 装系统时,选下 gpt 分区个事,即可安装系统
9-分区方式介绍
1-fdisk
传统的 MBR(Master Boot Record)分区方式,有一个局限: 无法支持超过 2TB 的硬盘分区(或单个分区超过 2TB)
2-parted
如果大于 2TB 就用 GPT(Globally Unique Identifier Partition Table Format)分区概念。 GPT分区表很好的解决了传统 MBR 无法逾越 2TB 的限制。但是在 linux 系统中,传统的 fdisk 命令无法支持 gpt 分区方式。
parted 的操作都是实时的,也就是说你执行了一个分区的命令,他就实实在在的分区了。而不是像fdisk 那样,需要执行 w 命令写入所做的修改,所以进行 parted 的测试千万注意不能在生产环境中。
Parted 特性简述:
1) 是一个磁盘分区管理工具,他比 fdisk 更加灵活,功能也更加丰富,同时还支持 GUID 分区表(GUID Partition Table),这在 IA64 平台管理磁盘是非常有用,它同时支持交互模式和非交互模式。
2) 它除了能够进行分区的添加、删除等常见操作作外,还可以移动分区,制作文件系统,调整文件系统大小,复制文件系统。
10-mbr是什么
mbr引导:主引导记录
mbr在哪里:磁盘的0磁头 0磁道 1扇区 前446字节
一个扇区的大小为512字节:
前446字节 mbr
中间64字节 分区表
最后2字节 分区结束表示55AA
分区表:
在分区表的64字节里,划分为4个格子 16*4
每个格子里存放的是分区的信息(主分区 扩展分区)
11-通过fdisk给磁盘分区(创建一个10M主分区和一个40M逻辑分区)
1-使用fdisk会提示一个错误
[root@znix ~]# 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 0x31dcd35a.
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)
警告 : 可以关闭dos的兼容模式,使用扇区作为分区的默认单位 -cu ↓
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):
2-fdisk添加上了 -cu 参数
-cu 参数是在分区的时候,能够以扇区的方式进行。
[root@znix ~]# fdisk -cu /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xb9f506a4.
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)
Command (m for help):
3-查看fdisk的帮助信息
Command (m for help): m
Command action
d delete a partition 删除一个分区
m print this menu 显示帮助菜单
n add a new partition 创建一个分区
p print the partition table 显示分区表
q quit without saving changes 退出不保存
w write table to disk and exit 保存并退出
4-创建一个主分区
Command (m for help): n
Command action
e extended 扩展分区
p primary partition (1-4) 主分区
p
Partition number (1-4): 1 第一个分区
First sector (2048-208895, default 2048): 直接回车为默认
Using default value 2048 默认选择第一个扇区
Last sector, +sectors or +size{K,M,G} (2048-208895, default 208895): +10M
5-显示一下分出来的分区
Command (m for help): p
Disk /dev/sdb: 106 MB, 106954752 bytes
64 heads, 32 sectors/track, 102 cylinders, total 208896 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xb9f506a4
Device Boot Start End Blocks Id System
/dev/sdb1 2048 22527 10240 83
6-创建一个扩展分区
扩展分区的分区原则是:剩多少给多少
Command (m for help): n
Command action
e extended 扩展分区
p primary partition (1-4)
e
Partition number (1-4): 2
First sector (22528-208895, default 22528):
Using default value 22528
Last sector, +sectors or +size{K,M,G} (22528-208895, default 208895):
Using default value 208895
7-显示现在的分区表信息
Command (m for help): p
Disk /dev/sdb: 106 MB, 106954752 bytes
64 heads, 32 sectors/track, 102 cylinders, total 208896 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xb9f506a4
Device Boot Start End Blocks Id System
/dev/sdb1 2048 22527 10240 83 Linux
/dev/sdb2 22528 208895 93184 5 Extended
8-在拓展分区下创建逻辑分区
Command (m for help): n
Command action
l logical (5 or over) 逻辑分区,创建完扩展分区后只能创建逻辑分区
p primary partition (1-4)
l
First sector (24576-208895, default 24576):
Using default value 24576
Last sector, +sectors or +size{K,M,G} (24576-208895, default 208895): +40M
9-显示一下当前的分区表
Command (m for help): p
Disk /dev/sdb: 106 MB, 106954752 bytes
64 heads, 32 sectors/track, 102 cylinders, total 208896 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xb9f506a4
Device Boot Start End Blocks Id System
/dev/sdb1 2048 22527 10240 83 Linux
/dev/sdb2 22528 208895 93184 5 Extended
/dev/sdb5 24576 106495 40960 83 Linux
10-保存并退出
fdisk 必须保存以后才能生效,w为保存并退出
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
12-添加一块硬盘sdb 100m划分一个分区,挂载到/mnt目录
1-创建一个主分区
[root@znix ~]# fdisk -cu /dev/sdb
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First sector (2048-208895, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-208895, default 208895):
Using default value 208895
都选择默认就是使用整块盘的空间创建一个分区
显示当前的分区表
Command (m for help): p
Disk /dev/sdb: 106 MB, 106954752 bytes
64 heads, 32 sectors/track, 102 cylinders, total 208896 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xb9f506a4
Device Boot Start End Blocks Id System
/dev/sdb1 2048 208895 103424 83 Linux
保存并退出
fdisk 必须保存以后才能生效,w为保存并退出
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
2-格式化创建文件系统
mkfs ==make filesystem即创建文件系统。
[root@znix ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=1024 (log=0) #block的大小
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
25896 inodes, 103424 blocks #inode与block的数量
5171 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
13 block groups
8192 blocks per group, 8192 fragments per group
1992 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 30 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
3-关闭分区的自我检查
tune2fs 命令
-c 挂载多少次 0 为关闭
-i 隔多长时间 0 为关闭
[root@znix ~]# tune2fs -c 0 -i 0 /dev/sdb1
tune2fs 1.41.12 (17-May-2010)
Setting maximal mount count to -1
Setting interval between checks to 0 seconds
4-挂载磁盘
[root@znix ~]# mount /dev/sdb1 /mnt/
[root@znix ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 1.9G 6.5G 23% /
tmpfs 238M 0 238M 0% /dev/shm
/dev/sda1 190M 40M 141M 22% /boot
/dev/sdb1 94M 1.6M 88M 2% /mnt
5-让磁盘永久挂载,开机自动挂载
两个文件可以实现:
/etc/rc.local
/etc/fstab
在/etc/rc.local文件中,写入什么命令都可以执行。
/etc/fstab 文件的内容
[root@znix ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Thu Aug 10 18:33:48 2017
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk’
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=49bad9e9-cf33-4a15-ba84-4fd28e70bd29 / ext4 defaults 1 1
UUID=7426d0f3-56d6-4fa6-a1c3-f2c8632bfbb8 /boot ext4 defaults 1 2
UUID=46bc0a52-b13f-4845-8baa-90207849d5c5 swap swap 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
磁盘分区设备 挂载点 文件系统的类型 挂载参数 是否进行dump备份 是否进行fsk磁盘检查
将挂载信息写入配置文件
[root@znix ~]# tail -1 /etc/fstab
/dev/sdb1 /mnt ext4 defaults 0 0
13-显示系统中的uuid
使用blkid命令可以查看系统磁盘的uuid。
[root@znix ~]# blkid
/dev/sda3: UUID=”49bad9e9-cf33-4a15-ba84-4fd28e70bd29″ TYPE=”ext4″
/dev/sda1: UUID=”7426d0f3-56d6-4fa6-a1c3-f2c8632bfbb8″ TYPE=”ext4″
/dev/sda2: UUID=”46bc0a52-b13f-4845-8baa-90207849d5c5″ TYPE=”swap”
/dev/sdb1: UUID=”7101630b-b325-49d1-92b9-0a500c2a07f6″ TYPE=”ext4″
14-磁盘分区之parted + gpt
fdisk 与 parted 的区别
fdisk mbr 分区表 硬盘容量小于2TB
parted gpt 分区表 硬盘容量大于2TB
⚠注意:parted 创建分区实时生效,比较危险。
1-查看下帮助信息
[root@znix ~]# parted /dev/sdc
GNU Parted 2.1
Using /dev/sdc
Welcome to GNU Parted! Type ‘help’ to view a list of commands.
(parted) h
mklabel,mktable LABEL-TYPE create a new disklabel (partition table)
创建分区表
mkpart PART-TYPE [FS-TYPE] START END make a partition
创建一个分区
mkpartfs PART-TYPE FS-TYPE START END make a partition with a file system
创建一个分区 分区带着文件系统
print [devices|free|list,all|NUMBER] display the partition table, available
devices, free space, all found partitions, or a particular partition
显示分区信息
rm NUMBER delete partition NUMBER
删除一个分区
2-创建分区表
[root@znix ~]# parted /dev/sdc
GNU Parted 2.1
Using /dev/sdc
Welcome to GNU Parted! Type ‘help’ to view a list of commands.
(parted) mklabel gpt #创建GPT分区表
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 107MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
mkpart 可以使用的PART-TYPE类型
GPT 格式可以创建N个主分区,所以类型都选为主分区即可。
(parted) help mkpart
mkpart PART-TYPE [FS-TYPE] START END make a partition
PART-TYPE is one of: primary, logical, extended
主分区 ,逻辑分区 ,扩展分区
3-对磁盘进行分区
(parted) mkpart primary 0 10
Warning: The resulting partition is not properly aligned for best performance.
提示分区没有对齐,这个错误无视即可。
Ignore/Cancel? I 忽略/取消
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 107MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 17.4kB 10.0MB 9983kB primary
4-再创建一个分区
(parted) mkpart primary 10 20
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 107MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 17.4kB 10.0MB 9983kB primary
2 10.5MB 19.9MB 9437kB primary
5-使用parted命令非交互式创建分区
[root@znix ~]# parted /dev/sdc mkpart primary 50 100
Information: You may need to update /etc/fstab.
[root@znix ~]# parted /dev/sdc print #显示磁盘的格式
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 107MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 17.4kB 50.0MB 50.0MB primary
2 50.3MB 99.6MB 49.3MB primary
6-创建swap分区及使用
【JAVA环境常见】linux内存不够用,会使用swap分区。
1.4.1 手动添加swap空间,创建一个文件
使用dd 命令创建一个块文件。
[root@znix ~]# dd if=/dev/zero of=/tmp/100M bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 2.96654 s, 35.3 MB/s
[root@znix ~]# ll -h /tmp/100M
-rw-r–r– 1 root root 100M Sep 18 10:01 /tmp/100M
查看创建出来的文件的类型
现在的类型为data 数据块。
[root@znix ~]# file /tmp/100M
/tmp/100M: data
7-将这个文件变成swap
mkswap命令将文件类型格式化成swap格式
[root@znix ~]# mkswap /tmp/100M
mkswap: /tmp/100M: warning: don’t erase bootbits sectors
on whole disk. Use -f to force.
Setting up swapspace version 1, size = 102396 KiB
no label, UUID=81fa08be-a18f-4bc6-b950-fa3d90f969a1
修改之后的文件类型:
[root@znix ~]# file /tmp/100M
/tmp/100M: Linux/i386 swap file (new style) 1 (4K pages) size 25599 pages
8-让这个文件起作用,将swap空间添加到系统中
实例1查看swap的所使用情况
[root@znix ~]# free -h
total used free shared buffers cached
Mem: 474M 465M 8.8M 252K 15M 357M
-/+ buffers/cache: 93M 381M
Swap: 767M 0B 767M
实例2 使用swap命令将swap文件,添加到系统中。
[root@znix ~]# swapon /tmp/100M
实例3 现在查看 swap的使用情况
[root@znix ~]# free -h
total used free shared buffers cached
Mem: 474M 465M 8.7M 252K 15M 357M
-/+ buffers/cache: 93M 381M
Swap: 867M 0B 867M
实例4 查看swap的详细信息,使用 swap -s 。
[root@znix ~]# swapon -s
Filename Type Size Used Priority
/dev/sda2 partition 786428 0 -1
/tmp/100M file 102396 0 -2
9-如何让添加的swap文件永久生效
1)把命令放入/etc/rc.local 开机自启动文件中。
a) swapon /tmp/100M 命令
2)写入/etc/fstab 文件中
/tmp/100M swap swap defaults 0 0
第5列 dump备份
第6列 磁盘检查