Linux磁盘管理
1、相关知识
磁盘,是计算机硬件中不可或缺的部分磁盘,是计算机的外部存储器中类似磁带的装置,将圆形的磁性盘片装在一个方的密封盒子里,这样做的目的是为了防止磁盘表面划伤,导致数据丢失。磁盘有软磁盘,硬磁盘。硬磁盘就是机械硬盘。
硬盘是电脑主要的存储媒介之一,由一个或者多个铝制或者玻璃制的碟片组成。碟片外覆盖有铁磁性材料。硬盘有固态硬盘(SSD 盘,新式硬盘)、机械硬盘(HDD 传统硬盘)、混合硬盘(HHD 一块基于传统机械硬盘诞生出来的新硬盘)。SSD采用闪存颗粒来存储,HDD采用磁性碟片来存储,混合硬盘(HHD: Hybrid Hard Disk)是把磁性硬盘和闪存集成到一起的一种硬盘。绝大多数硬盘都是固定硬盘,被永久性地密封固定在硬盘驱动器中。
与硬盘相关的物理名词有:扇区(sector)、磁道(track)、磁头(head)、柱面(Cylinder柱面=盘面数*磁道数)、
2、利用命令fdisk –l查看硬盘相关信息
[root@localhost ~]# fdisk -l
Disk /dev/sda: 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: 0x000df0a3
Device Boot Start End Blocks Id System
/dev/sda1 1 262 2097152 82 Linux swap / Solaris
Partition 1 does not end on cylinder boundary.
/dev/sda2 * 262 2611 18873344 83 Linux
3、RAID磁盘阵列
RAID磁盘阵列(Redundant Arrays of Independent Disks)有"独立磁盘构成的具有冗余能力的阵列"之意。
磁盘阵列是由很多价格较便宜的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。磁盘阵列还能利用同位检查(Parity Check)的观念,在数组中任意一个硬盘故障时,仍可读出数据,在数据重构时,将数据经计算后重新置入新硬盘中。
以4块1T的硬盘为例,常用raid
raid 0 条带卷 至少1块盘
优点:成倍提高写入和读取速度,提高4倍,总容量4T
缺点:数据安全性较低
raid 1 镜像卷 只能两块盘 读写速度没有提升,总容量1T
优点:安全性高
缺点:性价比低
raid 5 至少三块盘 总容量3T,写入速度提高大概两倍,读取速度提高三倍,下图中HD4用来做校验盘
优点:比较折中,允许坏一块盘,数据安全性比raid0好
raid 1+0=10 至少需要4块盘,偶数 总容量2T,读写速度提升总盘数读取速度的一半,常用于数据库服务器
优点:同时满足速度和安全性
缺点:性价比低
4、LVM逻辑卷管理
LVM逻辑卷管理(Logical Volume Manager)是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4内核上实现,目前最新版本为:稳定版1.0.5,开发版 1.1.0-rc2,以及LVM2开发版。Linux用户安装Linux操作系统时遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件因为受上层文件系统的限制,也不能跨越多个分区来存放,所以也不能同时放到别的磁盘上。而遇到出现某个分区空间耗尽时,解决的方法通常是使用符号链接,或者使用调整分区大小的工具,但这只是暂时解决办法,没有从根本上解决问题。随着Linux的逻辑卷管理功能的出现,这些问题都迎刃而解,用户在无需停机的情况下可以方便地调整各个分区大小。
优点:可灵活调整在线分区大小
缺点:磁盘读写性能会降低
5、在Linux下加SCSI硬盘
SCSI硬盘被系统识别的名称为sd,IDE硬盘被系统识别的名称为hd
虚拟机添加硬盘,重新开机,执行fdisk –l查看
[root@localhost ~]# fdisk -l
Disk /dev/sda: 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: 0x00098b99
Device Boot Start End Blocks Id System
/dev/sda1 1 262 2097152 82 Linux swap / Solaris
Partition 1 does not end on cylinder boundary.
/dev/sda2 * 262 2611 18873344 83 Linux
Disk /dev/sdb: 1073 MB, 1073741824 bytes #新加的硬盘
255 heads, 63 sectors/track, 130 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: 0x00000000
6、fdisk对硬盘进行分区
fdisk /dev/sdb
常用参数
m print this menu #打印帮助信息
n add a new partition #增加一个分区
p print the partition table #打印分区表
d delete a partition #删除一个分区
w write table to disk and exit #写入分区表到硬盘并退出
q quit without saving changes #退出不保存
l list known partition types #已知分区类型列表
t change a partition's system id #改变系统分区的id号
Command (m for help): n
Command action
l logical (5 or over) #逻辑分区
e extended #扩展分区
p primary partition (1-4) #主分区
fdisk非交互式分区:
echo -e "n\np\n1\n\n+10M\nn\ne\n2\n\n\nn\nl\n\n+10M\nn\nl\n\n\n\nw"|fdisk /dev/sdb
MBR 分区方案 MBR存储在0磁头(柱面)0磁道1扇区
在MBR的分区表中,逻辑分区不限数量,主分区最多4个,扩展分区只占一个主分区
4个主分区1-4,无扩展分区,扩展分区可以进行二次分区,扩展分区下进行二次划分的分区叫逻辑分区
分区类型:分区p,扩展分区e,逻辑分区l
3个主分区+1个扩展分区(3p+1e),
2个主分区+1个扩展分区(2p+1e)
1个主分区+1个扩展分区(1p+1e)
如果要分5个分区,可选分区方案
3p+2l
2p+3l
1p+4l
如果要分6个分区,可选分区方案
3p+3l
2p+4l
1p+5l
[root@localhost ~]# ls /dev/sd*
/dev/sda /dev/sda2 /dev/sdb1 /dev/sdb3 /dev/sdb6 /dev/sdb8
/dev/sda1 /dev/sdb /dev/sdb2 /dev/sdb5 /dev/sdb7
7、格式化分区
mkfs==make file system执行命令mkfs 默认磁盘格式为ext2 指定格式为mkfs.ext4 /dev/sdb1 在mkfs后跟 . + 文件系统格式
[root@localhost ~]# mkfs.ext4 /dev/sdb
mke2fs 1.41.12 (17-May-2010)
/dev/sdb is entire device, not just one partition!
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
8、挂载并查看
硬盘只有在挂载之后才能访问,挂载之前如果原来的路径/mnt/下有数据,在挂载之前不做任何操作,那么挂载之后查看挂载目录下的文件时,系统会遮挡掉原来存在的文件,这样原来的文件并不会被查看到,使用命令umount /mnt 卸载硬盘之后可以重新查看
[root@localhost ~]# ls /mnt/
[root@localhost ~]# cp /etc/passwd /mnt/
[root@localhost ~]# ls /mnt/
passwd
[root@localhost ~]# mount /dev/sdb1 /mnt/
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 18G 2.2G 15G 13% /
tmpfs 931M 0 931M 0% /dev/shm
/dev/sdb1 107M 1.6M 100M 2% /mnt
[root@localhost ~]# ls /mnt/
lost+found
[root@localhost ~]# umount /mnt/
[root@localhost ~]# ls /mnt/
passwd
需要说明的是,如果不需要或者不对新添加的硬盘分区,可以跳过分区的步骤,直接进行格式化,挂载操作
9、不重启机添加新的硬盘
ls /sys/class/scsi_host/ 查看主机总线号
echo "- - -" > /sys/class/scsi_host/host0/scan 重新扫描SCSI总线来添加设备
10、永久挂载磁盘的方法
方法一:
将挂载命令mount /dev/sdb /mnt写入/etc/rc.local中
[root@localhost ~]# vim /etc/rc.local
[root@localhost ~]# cat vim /etc/rc.local
cat: vim: No such file or directory
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
mount /dev/sdb /mnt
方法二:(推荐使用)
第1步:编辑/etc/fstab文件
[root@localhost ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Fri Mar 23 14:44:05 2018
#
# 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=fb3deb8a-e2ad-4482-9f53-15c6a17ae84f / ext4 defaults 1 1
UUID=2b0d405c-7e29-4310-ae56-e6045feae03b 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
说明:
第一列:指定硬盘设备名称/dev/sdb,也可以指定硬盘的UUID
建议:在实际中会随时加硬盘,盘符会改变,所以推荐使用UUID进行挂载,避免不必要的麻烦
第二列:指定挂载点
第三列:文件系统的类型
第四列:挂载的参数
第五列:是否备份 1
第六列:开机时是否检查磁盘fsck 1
第2步:将需要挂载的硬盘添加进去后执行命令mount –a 挂载成功
-a:将 /etc/fstab 中定义的所有档案系统挂上
mount -o remount,rw /mnt/sysimage
-o remount:将一个已经挂下的档案系统重新用不同的方式挂上
11、超过2T的硬盘分区方法
MBR类型的分区表最多支持2T的硬盘
parted解决分区超过2T的硬盘,用GPT类型的分区表
fdisk只支持MBR,需要w保存
parted 除了支持MBR,还支持GPT,立即生效
[root@localhost ~]# fdisk -l
Disk /dev/sda: 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: 0x00098b99
Device Boot Start End Blocks Id System
/dev/sda1 1 262 2097152 82 Linux swap / Solaris
Partition 1 does not end on cylinder boundary.
/dev/sda2 * 262 2611 18873344 83 Linux
Disk /dev/sdb: 3221.2 GB, 3221225472000 bytes
255 heads, 63 sectors/track, 391625 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: 0x00000000
12、使用parted进行分区的步骤
参数:
(parted) help
align-check TYPE N check partition N for TYPE(min|opt)
alignment
check NUMBER do a simple check on the file system
cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER copy file system to another partition
help [COMMAND] print general help, or help on
COMMAND
mklabel,mktable LABEL-TYPE create a new disklabel (partition
table)
mkfs NUMBER FS-TYPE make a FS-TYPE file system on
partition NUMBER
mkpart PART-TYPE [FS-TYPE] START END make a partition
mkpartfs PART-TYPE FS-TYPE START END make a partition with a file system
move NUMBER START END move partition NUMBER
name NUMBER NAME name partition NUMBER as NAME
print [devices|free|list,all|NUMBER] display the partition table,
available devices, free space, all found partitions, or a particular
partition
quit exit program
rescue START END rescue a lost partition near START
and END
resize NUMBER START END resize partition NUMBER and its file
system
rm NUMBER delete partition NUMBER#删除分区
select DEVICE choose the device to edit
set NUMBER FLAG STATE change the FLAG on partition NUMBER
toggle [NUMBER [FLAG]] toggle the state of FLAG on partition
NUMBER
unit UNIT set the default unit to UNIT
version display the version number and
copyright information of GNU Parted
parted /dev/sdb
第1步:mklabel gpt 创建分区表类型为gpt
第2步:创建一个分区mkpart,直接从%0回车,若要分多个区,则直接输入大小
[root@localhost ~]# parted /dev/sdb
GNU Parted 2.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
(parted) mkpart
Partition name? []? 1
File system type? [ext2]?
Start? 0%
End? 1000G
(parted) mkpart
Partition name? []? 2
File system type? [ext2]?
Start? 1000G
End? 2000G
(parted) mkpart
Partition name? []? 3
File system type? [ext2]?
Start? 2000G
End? 100%
(parted) P
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 3221GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 1049kB 1000GB 1000GB 1
2 1000GB 2000GB 1000GB 2
3 2000GB 3221GB 1221GB 3
可以非交互式分区,直接在命令行执行命令及所有参数,便于多台服务器批量分区
parted /dev/sdb mkpart a ext4 0% 200
第3步:格式化
mkfs.ext4 /dev/sdb
[root@localhost ~]# ls /dev/sd
sda sda1 sda2 sdb sdb1 sdb2 sdb3
[root@localhost ~]# mkfs.ext4 /dev/sdb1 #中间过程省略
[root@localhost ~]# mkfs.ext4 /dev/sdb2 #中间过程省略
[root@localhost ~]# mkfs.ext4 /dev/sdb3 #中间过程省略
[root@localhost ~]# parted /dev/sdb
GNU Parted 2.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 3221GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 1049kB 1000GB 1000GB ext4 1
2 1000GB 2000GB 1000GB ext4 2
3 2000GB 3221GB 1221GB ext4 3
(parted) q
[root@localhost~]#
第4步:挂载使用
mount /dev/sdb /mnt
mount /dev/sdb /mnt
[root@localhost ~]# ls /mnt/
a b c
[root@localhost ~]# mount /dev/sd
sda sda1 sda2 sdb sdb1 sdb2 sdb3
[root@localhost ~]# mount /dev/sdb1 /mnt/a
[root@localhost ~]# mount /dev/sdb2 /mnt/b
[root@localhost ~]# mount /dev/sdb2 /mnt/c
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 18G 2.2G 15G 13% /
tmpfs 931M 0 931M 0% /dev/shm
/dev/sdb1 917G 72M 870G 1% /mnt/a
/dev/sdb2 917G 72M 870G 1% /mnt/b
/dev/sdb2 917G 72M 870G 1% /mnt/c
13、parted对MBR格式进行分区
第1步: parted /dev/sdb进入分区工具 ,mklabel创建分区表类型为msdos
第2步:创建一个分区mkpart,直接从%0回车,若要分多个区,则直接输入大小
[root@localhost ~]# parted /dev/sdb
GNU Parted 2.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel msdos
(parted) mkpart
Partition type? primary/extended? p
File system type? [ext2]?
Start? 0%
End? 1000G
(parted) mkpart
Partition type? primary/extended? p
File system type? [ext2]?
Start? 1000G
End? 2000G
(parted) mkpart
Partition type? primary/extended? p
File system type? [ext2]?
Start? 2000G
End? 100%
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 3221GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 1049kB 1000GB 1000GB primary
2 1000GB 2000GB 1000GB primary
3 2000GB 3221GB 1221GB primary
第3步:格式化(同上)
mkfs.ext4 /dev/sdb
第4步:挂载使用(同上)
mount /dev/sdb /mnt
博主原创文章,转载请务必注明出处