linux下的存储管理之一

来源:互联网 发布:房价一直上涨后果 知乎 编辑:程序博客网 时间:2024/06/04 08:33

一、存储管理(1)

1、存储的基础知识

知识点: 基本分区、逻辑卷LVM、EXT3/4文件系统、磁盘限额、RAID

file://C:\Users\zjyh\AppData\Local\Temp\ct_tmp/1.png

△磁头(Heads):每张磁片的正反两面各有一个磁头,一个磁头对应一张磁片的一个面。因此,用第几磁 头就可以表示数据在哪个磁面。
△柱面(Cylinder):所有磁片中半径相同的同心磁道构成“柱面",意思是这一系列的磁道垂直叠在一起,就形成一个柱面的形状。简单地理解,柱面数=磁道数。
△扇区(Sector):将磁道划分为若干个小的区段,就是扇区。虽然很小,但实际是一个扇子的形状,故称为扇区。每个扇区的容量为512字节

CHS(以sector方式存储)的问题:每个sector 512byte,它前边还需要有8byte存储该sector的信息,所以它的浪费就是8/512,当磁盘的总容量很大时,这个浪费就可想而知了;且内存中每个page frame为4k,它与磁盘交互时,每个memory page frame需要处理8次都可以存储到磁盘上。所以后续使用block为存储单位,即4K (LBA)。

一、两种分区方式(针对分区表)
存储大小 分区软件 分区表
2TB以下的硬盘 fdisk/parted MSDOS(MBR) /GPT
2TB以上的硬盘 parted GPT

MSDOS(MBR)分区的限制:
只支持4个主分区,总分区数不能超过15个
只支持2TB以下的硬盘
GPT的限制:
没有限制
注意:从MBR转到GPT,或从GPT转换到MBR会导致数据全部丢失!
========================================================
小知识: kernel对不同接口的硬盘命名
OS IDE(并口) SATA(串口) SCSI USB
RHEL5 /dev/hda /dev/sda /dev/sda /dev/sda
RHEL6 /dev/sda /dev/sda /dev/sda /dev/sda

HP服务器
/dev/cciss/c0d0
/dev/cciss/c0d0p1 //c0第一个控制器, d0第一块磁盘, p1分区1
/dev/cciss/c0d0p2 //c0第一个控制器, d0第一块磁盘, p2分区2
========================================================

2、基本分区管理

存储管理
分区(基本分区)、格式化、挂载

========================================================
内容摘要:
分区工具fdisk msdos
分区工具parted msdos 或 GPT

一、分区工具fdisk MBR(msdos)
1. 查看新设备是否发现
# ll /dev/sd* //查看Kernel识别到的设备
# fdisk -cul //u以扇区的方式查看

2. 分区
# fdisk -cu /dev/sdb //分区
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
t change a partition's system id
w write table to disk and exit
# ll /dev/sd*
# partx -a /dev/sdb //让内核刷新分区表
# ll /dev/sd*

3. 格式化(创建文件系统
Windwos: FAT,FAT32,NTFS
Linux: VFAT,Ext2,Ext3,Ext4,GFS,GFS2

[root@yangs ~]# mkfs.ext4 /dev/sdb1 //100M的分区
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=1024 (log=0) //块大小1024B (1K)
Fragment size=1024 (log=0)
25688 inodes, 102400 blocks
9765 blocks (5.00%) reserved for the super user

[root@yangs ~]# mkfs.ext4 /dev/sdb2 //1G的分区
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2) //块大小4096B (4K)
Fragment size=4096 (log=2)
65536 inodes, 262144 blocks
12207 blocks (5.00%) reserved for the super user

4. 挂载
建立挂载点
# mkdir /mnt/disk1 //建立挂载点,挂载点建议是空目录
# mkdir /mnt/disk2

挂载
==手动: 临时
[root@yangs ~]# mount -o ro -t ext4 /dev/sdb1 /mnt/disk1
[root@yangs ~]# mount /dev/sdb2 /mnt/disk2

[root@yangs ~]# mount
/dev/sdb1 on /mnt/disk1 type ext4 (ro)
/dev/sdb2 on /mnt/disk2 type ext4 (rw)
[root@yangs ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sdb1 97M 5.6M 87M 7% /mnt/disk1
/dev/sdb2 1008M 34M 924M 4% /mnt/disk2

==开机自动挂载 /etc/fstab
[root@yangs ~]# umount /dev/sdb1
[root@yangs ~]# blkid
/dev/sdb1: UUID="653a949d-ebf5-4543-9f67-4b71cbe5cf2b" TYPE="ext4"
/dev/sdb2: UUID="7ca49b1d-5359-413f-83aa-ed51c7421877" TYPE="ext4"
[root@yangs ~]# vim /etc/fstab
UUID="653a949d-ebf5-4543-9f67-4b71cbe5cf2b" /mnt/disk1 ext4 defaults 0 0
UUID="7ca49b1d-5359-413f-83aa-ed51c7421877" /mnt/disk2 ext4 defaults 0 0
[root@yangs ~]# mount -a //读取/etc/fstab并挂载

二、分区工具parted msdos 或 GPT
命令行
parted bigfile mklabel gpt
parted bigfile mkpart primary 1 1TB
parted bigfile mkpart primary 1TB 2TB
parted bigfile print
交互式

[root@yangs ~]# parted /dev/sdc
GNU Parted 2.1
Using /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) help
(parted) mklabel gpt
(parted) print
(parted) mkpart primary 1M 1T
(parted) mkpart primary 1T 3T
(parted) mkpart primary 3T 3.1T
(parted) print
(parted) mkpart primary 3100GB 5T
(parted) mkpart primary 5000GB 6T
(parted) mkpart primary 6T 7T
(parted) print
Partition Table: gpt
Number Start End Size File system Name Flags
1 17.4kB 1000GB 1000GB primary
2 1000GB 3000GB 2000GB primary
3 3000GB 3100GB 100GB primary
4 3100GB 5000GB 1900GB primary
5 5000GB 6000GB 1000GB primary
6 6000GB 7000GB 1000GB primary
(parted) rm 6
(parted) print
(parted) quit
Information: You may need to update /etc/fstab.

kpartx -a bigfile (删除时使用kpartx -d bigfile,注如何创建的就需要如何删除)
/dev/mapper/loop0
/dev/mapper/loop0{p1,p2}

mkfs.ext4 /dev/mapper/loop0p2
mount /dev/mapper/loopop2 /opt

[root@yangs ~]# partx -a /dev/sdc
[root@yangs ~]# ll /dev/sdc*
brw-rw---- 1 root disk 8, 32 Jan 9 16:07 /dev/sdc
brw-rw---- 1 root disk 8, 33 Jan 9 16:06 /dev/sdc1
brw-rw---- 1 root disk 8, 34 Jan 9 16:06 /dev/sdc2
brw-rw---- 1 root disk 8, 35 Jan 9 16:06 /dev/sdc3
brw-rw---- 1 root disk 8, 36 Jan 9 16:06 /dev/sdc4
brw-rw---- 1 root disk 8, 37 Jan 9 16:06 /dev/sdc5

3、逻辑卷管理LVM

逻辑卷LVM
1. 在线(on-line)扩容,离线(off-line)缩小
2. 快照snapshot
参考文档:

========================================================
创建 扫描 显示详细 显示 扩展 缩小 删除 更改 ...
pvcreate pvscan pvdisplay pvs pvremove
vgcreate vgscan vgdisplay vgs vgextend vgreduce vgremove vgchange
lvcreate lvscan lvdisplay lvs lvextend lvreduce lvremove lvchange
========================================================
一、创建逻辑卷
1. 创建物理卷PV(整个硬盘不需要分区
[root@yangs ~]# pvcreate /dev/sdc
2. 创建卷组VG
[root@yangs ~]# vgcreate vg02 /dev/sdc
3. 创建逻辑卷LV
[root@yangs ~]# lvcreate -L 400M -n lv02 vg02
[root@yangs ~]# lvcreate -l 200 -n lv03 vg02
[root@yangs ~]# lvscan
ACTIVE '/dev/vg02/lv02' [400.00 MB] inherit
4. 创建文件系统并挂载
[root@yangs ~]# mkfs.ext4 /dev/vg02/lv02
[root@yangs ~]# vim /etc/fstab
/dev/vg02/lv02 /mnt/lv02 ext4 defaults 0 0
[root@yangs ~]# mkdir /mnt/lv02
[root@yangs ~]# mount -a
[root@yangs ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/mapper/vg02-lv02
396672 10544 365648 3% /mnt/lv02
二、扩展逻辑卷
第一种情况:lv所在的卷组还有足够用于扩展的空间
[root@yangs ~]# lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
lv02 vg02 -wi-ao 400.00M
lv03 vg02 -wi-ao 800.00M
[root@yangs ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg02 1 2 0 wz--n- 100.00G 98.82G

[root@yangs ~]# lvextend -L 1G /dev/vg02/lv02 //扩展逻辑卷
[root@yangs ~]# lvscan
ACTIVE '/dev/vg02/lv02' [1.00 GB] inherit
ACTIVE '/dev/vg02/lv03' [800.00 MB] inherit
[root@yangs ~]# resize2fs /dev/vg02/lv02 //扩文件系统
[root@yangs ~]# df -h

第二种情况:lv所在的卷组没有足够的空间
[root@yangs ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg01 1 4 0 wz--n- 9.97G 0
vg02 1 2 0 wz--n- 100.00G 98.21G
[root@yangs ~]# pvcreate /dev/sdd //建立PV
[root@yangs ~]# vgextend vg02 /dev/sdd //扩展卷组
[root@yangs ~]# lvextend -L 100T /dev/vg02/lv02 //扩展逻辑卷
[root@yangs ~]# resize2fs /dev/vg02/lv02 //扩文件系统

========================================================
扩展知识:
PV也可以是一个分区:
[root@yangs ~]# fdisk -cul /dev/sdd
[root@yangs ~]# partx -a /dev/sdd
[root@yangs ~]# pvcreate /dev/sdd7
[root@yangs ~]# vgextend vg02 /dev/sdd7
[root@yangs ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg01 1 4 0 wz--n- 9.97G 0
vg02 2 2 0 wz--n- 101.82G 100.04G

PE:创建VG时,指定PE的size(默认为4M
[root@yangs ~]# pvcreate /dev/sdc
[root@yangs ~]# vgcreate -s 128M datastorage /dev/sdc
[root@yangs ~]# vgdisplay datastorage
PE Size 128.00 MB
Total PE 799
Alloc PE / Size 0 / 0
Free PE / Size 799 / 99.88 GB
[root@yangs ~]# lvcreate -l 799 -n database datastorage
[root@yangs ~]# mkfs.ext4 /dev/datastorage/database
[root@yangs ~]# mkdir /mnt/lv
[root@yangs ~]# vim /etc/fstab
/dev/datastorage/database /mnt/lv ext3 defaults 0 0
[root@yangs ~]# mount -a
[root@yangs ~]# df

删除LV,VG:
1. 停止应用程序对该相应文件系统的访问
2. 卸载文件系统,包括/etc/fstab
3. lvremove
4. vgremove
5. pvremove

激活VG/LV:
[root@yangs ~]# lvchange -an /dev/vg01/lv01
[root@yangs ~]# lvscan
inactive '/dev/vg01/lv01' [128.00 MiB] inherit
ACTIVE '/dev/vg01/lv02' [128.00 MiB] inherit
ACTIVE '/dev/vg01/lv03' [128.00 MiB] inherit
[root@yangs ~]# vgchange -an vg01
0 logical volume(s) in volume group "vg01" now active
[root@yangs ~]# lvscan
inactive '/dev/vg01/lv01' [128.00 MiB] inherit
inactive '/dev/vg01/lv02' [128.00 MiB] inherit
inactive '/dev/vg01/lv03' [128.00 MiB] inherit
[root@yangs ~]# vgchange -ay vg01
[root@yangs ~]# lvscan
ACTIVE '/dev/vg01/lv01' [128.00 MiB] inherit
ACTIVE '/dev/vg01/lv02' [128.00 MiB] inherit
ACTIVE '/dev/vg01/lv03' [128.00 MiB] inherit

缩小逻辑卷: off-line
1. 停止应用
2. 备份数据
3. 卸载文件系统
4. 检查文件系统e2fsck
5. 缩小文件系统
6. 缩小逻辑卷

[root@yangs ~]# umount /mnt/lv04/
[root@yangs ~]# e2fsck -f /dev/vg01/lv04
[root@yangs ~]# resize2fs /dev/vg01/lv04 1000M
[root@yangs ~]# lvreduce /dev/vg01/lv04 -L 1000M
[root@yangs ~]# mount -a
========================================================
、逻辑卷快照snapshot
逻辑卷做完快照后,对原卷的任何操作都不影响快照卷
作用:
1. 利用快照实现一致性备份

实现快照
[root@yangs ~]# lvscan
ACTIVE '/dev/vg01/lv06' [20.00 GiB] inherit
[root@yangs ~]# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
lv06 vg01 -wi-ao--- 20.00g
[root@yangs ~]# df -ThP /mnt/lv06
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg01-lv06 ext4 20G 287M 19G 2% /mnt/lv06

[root@yangs ~]# lvcreate -L 50M -s -n lv06-snap/dev/vg01/lv06
[root@yangs ~]# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
lv06 vg01 owi-aos-- 20.00g
lv06-snap vg01 swi-a-s-- 52.00m lv06 0.02

[root@yangs ~]# mkdir /mnt/lv06-snap
[root@yangs ~]# mount /dev/vg01/lv06-snap /mnt/lv06-snap
[root@yangs ~]# ls /mnt/lv06
etc1 etc2 etc3 lost+found
[root@sxl1 ~]# ls /mnt/lv06-snap/
etc1 etc2 etc3 lost+found

[root@yangs ~]# rm -rf /mnt/lv06/etc1
[root@sxl1 ~]# ls /mnt/lv06
etc2 etc3 lost+found
[root@sxl1 ~]# ls /mnt/lv06-snap/
etc1 etc2 etc3 lost+found

快照的自动增长:
[root@yangs ~]# vim /etc/lvm/lvm.conf
snapshot_autoextend_threshold = 70
snapshot_autoextend_percent = 50

[root@yangs ~]# /etc/init.d/lvm2-monitor start
[root@yangs ~]# chkconfig lvm2-monitor on
===========================================
扩展:
PE(physical extent):物理区域是物理卷中可用于分配的最小存储单元,物理区域大小在建立卷组时指定,一旦确定不能更改,同一卷组所有物理卷的物理区域大小需一致,新的pv加入到vg后,pe的大小自动更改为vg中定义的pe大小。
LE(logical extent):逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。
卷组描述区域:卷组描述区域存在于每个物理卷中,用于描述物理卷本身、物理卷所属卷组、卷组中逻辑卷、逻辑卷中物理区域的分配等所有信息,它是在使用pvcreate建立物理卷时建立的。
4、交换分区swap

增加交换分区
作用: ‘提升‘ 内存的容量
========================================================
一、查看现有的交换分区
[root@yangs ~]# free -m
total used free shared buffers cached
Mem: 1010 874 135 0 51 560
-/+ buffers/cache: 262 747
Swap: 1023 0 1023
[root@yangs ~]# swapon -s
Filename Type Size Used Priority
/dev/mapper/vg01-lv_swap partition 1048568 0 -1

二、增加交换分区
方法一: 使用分区或逻辑卷创建
1. 建立分区或LVM
[root@yangs ~]# fdisk -cu /dev/sda
[root@yangs ~]# partx -a /dev/sda
[root@yangs ~]# fdisk -cul /dev/sda
/dev/sda7 27423862 28423862 500000+ 82 Linux swap / Solaris
2. 初始化交换分区
[root@yangs ~]# mkswap /dev/sda7
3. 激活
[root@yangs ~]# vim /etc/fstab
/dev/sda7 swap swap defaults 0 0
[root@yangs ~]# swapon -a //激活所有的交换分区
[root@yangs ~]# swapon -s
Filename Type Size Used Priority
/dev/mapper/vg01-lv_swap partition 1048568 0 -1
/dev/sda7 partition 499992 0 -2

方法二:使用文件创建
[root@yangs ~]# dd if=/dev/zero of=/swap1.img bs=1M count=512
[root@yangs ~]# mkswap /swap1.img
Setting up swapspace version 1, size = 536866 kB
[root@yangs ~]# vim /etc/fstab
/swap1.img swap swap defaults 0 0
[root@yangs ~]# swapon -a
[root@yangs ~]# swapon -s
Filename Type Size Used Priority
/dev/mapper/vg01-lv_swap partition 1048568 0 -1
/dev/sda7 partition 499992 0 -2
/swap1.img file 524280 0 -3
========================================================


1 0