Linux的磁盘管理
(很重要请注意高能预警)
硬盘:几个盘片,双面,磁性颗粒,
处理速率不同步:借助于一个中间层
文件系统(FileSystem)
可以实现对磁盘行的文件进行读写
文件系统其实就是一个特殊软件,是直接安装到硬盘上的
硬盘分类
机械硬盘:
盘片组,磁头,磁头臂
马达、空气过滤片
固态硬盘
类似与内存的结构
机械硬盘简介
磁道(Track):磁盘旋转时候的同心圆,磁道编号从外向内,从0开始编号。
扇区(Sector):将每个磁道分割成等大小的空间,每个扇区大小都是512字节
柱面(Cylinder):不同盘片的相同扇区。磁盘分区的时候,是以柱面为单位进行分区的。
寻道时间:
移动磁道到目标磁道
旋转磁盘
PS:外侧磁道的读写性能,优于内侧磁道,所以系统一般安装在C盘 (C盘靠外)
保存分区信息
0号扇区:MBR:Master(main) Boot Record,主引导记录,512字节
第一部分:前446字节,存放程序bootloader,作用完成系统的开机启动
第二部分:中间64字节,Disk Patration Table,磁盘分区表,作用是记录磁盘分区
16字节标识一个分区,64字节可标识4个分区
第三部分:最后的2字节,Magic Number,标记当前MBR是否生效
分区类型
主分区
扩展分区
分区结构
全部都是主分区:1、2、3、4主
主+扩展分区:1主+1扩展 2主+1扩展 3主+1扩展
扩展分区只能有一个
扩展分区必须制作成逻辑分区才能使用
逻辑分区可以有无限多个
设备文件
linux 一切皆为文件
设备文件:物理设备在系统中的映射
块设备文件 :支持随机读写的设备,硬盘
字符设备文件 :支持线性读写,键盘
设备文件的默认位置: /dev
设备文件的设备号 :
主设备号(major number):标识设备类型(相同类型的设备,主设备号相同)
次设备好(ninor number):标识相同类型的不同设备
接口
IDE:并行的传输接口
SATA:串行的传输接口 (串行的速度快于并行)
SCSI:并行接口,企业使用,Small Computer System Interface
SAS:串行接口,性能好(串行的SCSI)
USB接口:
usb1.0
usb2.0
usb3.0
CentOS 6.x硬盘识别
/dev/sd#
#=12345...
/dev/sda1
/dev/sda2
Centos 5.x
IDE
/dev/hdx
SATA
/dev/sdx
接口都是控制芯片
网卡适配器 :独立核心功能是转换数据格式
usb控制器 :集成的
linux的磁盘对应的设备文件的命名
磁盘对应的设备文件依次/dev/sda sdb sdc .....
磁盘分区对应的设备文件
第一个主分区:/dev/sd#1
第二个主分区:/dev/sd#2
第三个主分区:/dev/sd#3
第四个主分区:/dev/sd#4
扩展分区
第一个逻辑分区:/dev/sd#5
【逻辑分区的编号是从5开始的】
fdisk命令
作用:查看或者修改磁盘的分区
格式:fdisk [选项] [设备文件]
选项:
-l:列举系统中的全部磁盘以及磁盘分区
(centos6中,默认将逻辑卷也识别为一个磁盘)
例子:只查看物理磁盘的分区
fdisk -l /dev/sd[a-z]
例子:只查看sda分区
fdisk -l /dev/sda
fdisk -l返回结果解析
Disk /dev/sda: 42.9 GB, 42949672960 bytes
设备文件名称 空间 空间
255 heads, 63 sectors/track, 5221 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: 0x0008cfb6
磁盘标识符【在磁盘数量多的情况下,非常有用】
Device Boot Start End Blocks Id System
/dev/sda1 * 1 64 512000 83 Linux
分区的设备文件 标识系统分区 起始柱面 结束柱面 磁盘块大小 分区类型 系统类型
/dev/sda2 64 5222 41430016 8e Linux LVM
注意:直接输fdisk+磁盘,如果不使用任何选项,那么就是对磁盘进行分区操作
分区操作实例
fdisk /dev/sdc
分区操作命令 (标示注释的是能用的到的)
a:toggle a bootable flag
b:edit bsd disklabel
c:toggle the dos compatibility flag
d:delete a partition 删除分区
l:list known partition types 列举分区类型
m:print this menu 打印帮助
n:add a new partition 新建分区
o:create a new empty DOS partition table
p:print the partition table 打印分区信息
q:quit without saving changes 退出
s:create a new empty Sun disklabel
t:change a partition‘s system id 修改分区类型id
u:change display/entry units
v:verify the partition table
w:write table to disk and exit 保存修改
x:extra functionality (experts only)
主+扩展<=4
分区以后的磁盘,需要安装文件系统才能使用
为什么分区?
方便检索磁盘上的文件
不是必须分区。
注意:如果一个磁盘已经分区并且在使用,那么在对磁盘进行分区操作可能会出现系统无法识别该分区,此时需要让内核重新读取MBR中的分区表。系统识别的分区信息记录在/proc/partitions文件中,partx命令和kpartx命令可以让内核重新读取分区信息。例如#partx –a /dev/sdb
分区必须安装软件才能实现文件的读写操作
--文件系统
常见文件系统
NTFS
FAT32
EXT系列
vfs:Virtual File System 虚拟文件系统
作用:将底层的各种各样的文件系统抽象成一个同一个文件系统,这样可以极大的简化上层应用在使用文件系统时候的复杂度。
linux文件系统详解
一、基本文件系统
1、ext系列文件系统
ext2 ext3 ext4
centos6 默认使用ext4
2、Reiserfs
处理和保存小文件的处理非常优秀
3、xfs
对大文件处理性能非常好。
文件大小无上限。
4、JFS,日志文件系统
IBM所开发
5、vfat,其实就是windows下的fat32
6、NTFS,linux到目前为止,对NTFS支持不好
(如果必须使用NTFS,那么建议只用NTFS来读数据,不要执行写操作)
二、集群文件系统
1、GFS2:Global File System 2 (全局文件文件系统)
由redhat所研发
2、OCFS2:Oracle Cluster File System 2
由Oracle所研发
三、网络文件系统
1、NFS:
2、smbfs
3、windows磁盘映射
四、光盘文件系统
1、iso9660
五、分布式文件系统
略
PS:磁盘分区也是文件,要使用磁盘分区需要将磁盘挂载到系统的一个目录中,这个目录就是该分区的访问入口。
mke2fs命令 (make ext2 file system)
作用:安装ex2文件系统
格式:mke2fs [选项] 分区设备文件
选项:-t ext3或ext4
【linux中一切皆文件,磁盘分区也是文件,要使用磁盘分区,需要将磁盘挂载到系统的一个目录中,这样,这个目录就是该分区的访问入口】
PS:有的时候做实验对磁盘进行重复的格式化-挂载的时候,可能出现报错信息,包括挂载的时候提示已经挂载了,格式化的时候提示is apparently in use by the system; will not make a filesystem here!,具体错误信息如下
[[email protected] /]# mount /dev/sda1 /media/
mount: /dev/sda1 already mounted or /media/ busy
[[email protected] /]# mke2fs -t ext4 /dev/sda1
mke2fs 1.41.12 (17-May-2010)
/dev/sda1 is apparently in use by the system; will not make a filesystem here!
可以尝试使用dmset
dmsetup manages logical devices that use the device-mapper driver. Devices are created by loading a table that specifies a target for each sector (512 bytes) in the logical device.
具体解决步骤如下
#首先检查dm中记录信息
[[email protected] /]# dmsetup status
VolGroup-lv_swap: 0 4063232 linear
VolGroup-lv_root: 0 36847616 linear
sda3: 0 1044225 linear
sda1: 0 2120517 linear
#移除sda1和3
[[email protected] /]# dmsetup remove sda1
[[email protected] /]# dmsetup remove sda3
#此时的系统就一切正常了
[[email protected] /]# mke2fs -t ext4 /dev/sda1
ext系列文件系统的(物理)构成
block:磁盘块,磁盘存储数据的最小单元(默认4kb)
block bitmap:块位图,作用是实现快速检索出空闲的磁盘块
inode list:inode 列表,这是存放inode 的空间
inode:index inode,索引节点,索引节点其实也是一个小的磁盘空间,一个inode用来存放一个文件,在inode中存放内包括(大小、属主属组、时间戳、连接数、文件所在的磁盘快的编号),但是在inode中,没有文件名。
inode bitmap:inode位图,快速从inode列表中找出一个空闲的inode
磁盘块是用来存储文件中的数据的
一般文件:磁盘块上所存储的就是文件中的内容
目录:所存放的是该目录下文件名称列表
打开文件(找到文件) 以打开cat /var/log/message 为例
1、找到根(根是自引用)
2、从根所在的磁盘块表中,找出var所在的inode编号
3、根据var所在的inode编号,就可以找到var所在的磁盘块
4、因为var是目录,所以var所在的磁盘块中存放的是一张表,在表中记录了log所在的inode
5、根据log的inode编号,可以找到log目录所在的磁盘块
6、从log的磁盘块的表中可以找到message文件所在的inode编号
7、从message的inode中,可以找到该文件的磁盘块,最终读取出文件
新建文件 以在/etc/下新建文件zx.txt,大小是10K,为例
1、扫描inode bitmap,检索出一个空闲的inode 。假设找出的1号inode
2、找出目录etc所在的磁盘块,在该磁盘块的表中添加一个条目,内容是 zx.txt-->1
【到此为止,就可以在磁盘上看到该文件,但是文件无法打开】
3、扫描block bitmap,找出3个空闲磁盘块,然后就可以向磁盘块中写入数据。
ext系列文件文件系统的重要特性
在向磁盘写入文件的时候,会提前锁定一个连续的空间
如果后期发现空间不够,那么再锁定一个连续空间
如果发现空间有剩余,那么释放剩余部分
【避免磁盘碎片产生】
删除文件 以在/etc/zx.txt为例
1、找到etc目录所在的磁盘,将表中的索引删除
【此时从磁盘上,就看不到该文件了】
2、将1号inode对应的inode bitmap置为零
3、将zx.txt所占用的磁盘块对应的block bitmap置为0
复制文件 以在/etc/zx.txt复制到home下为例
1、先找出一个空闲inode (假设是6)
2、找到home所在的磁盘块,在磁盘块的表中添加一个记录 zx.txt -->6
3、找出空闲磁盘块
4、将原文件磁盘块上的数据依次复制到新找出的磁盘块上
剪切文件 以在/etc/zx.txt剪切到home下为例
1、找到etc所在的磁盘块,将磁盘块的表中的zx.txt的索引记录剪切下来
2、找到home所在的磁盘块,在磁盘块的表中粘贴前面所剪切的索引记录
块组(Block Group)
每个块组中,有独立的inode,位图
超级块(super block)
记录包括
1、块组的数量
2、各个块中的磁盘数量、空闲数量、使用数量
3、各个块组中的inode数量,空闲数量,使用数量
块组描述表(GDT)
记录各个块组的范围
BOOT BLOCK
引导块
安装双系统的时候,第二个系统的引导程序安装在bootblock中
PS:下面画个图说明下。。。不过画的有点难看。。。将就看吧
ext系列
ext2
可以自动检测出不完整的文件并删除,但是速度非常慢
ext3:日志文件系统(journal File System)
在磁盘上创建一个日志空间,在创建文件的时候,先将文件的名称写入到日志空间,如果文件正常写入成功,那么从日志空间删除文件名称。
如果在写入过程发生宕机等故障,那么文件名会保留在日志空间中,下次启动的时候,系统会扫描日志空间,将日志空间中的文件删除。
[[email protected] ~]# mke2fs /dev/sdc1
mke2fs 1.41.12 (17-May-2010)
Filesystem label= 标签(卷标) *
OS type: Linux 操作系统类型
Block size=4096 (log=2) 磁盘块的大小,默认是4K **
Fragment size=4096 (log=2) 偏移大小
Stride=0 blocks, Stripe width=0 blocks
197600 inodes, 789185 blocks inode和磁盘块的总量 **
39459 blocks (5.00%) reserved for the super user 给管理员用户预留的磁盘空间大小 ***
First data block=0 起始磁盘块编号
Maximum filesystem blocks=809500672
25 block groups
32768 blocks per group, 32768 fragments per group
7904 inodes per group
Superblock backups stored on blocks: 超级块的备份所在的磁盘块编号 ***
32768, 98304, 163840, 229376, 294912
Writing inode tables: done done表示inode表写入成功写入成功
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 35 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
注意:如果是创建ext3文件系统,会多一个信息
Creating journal (16384 blocks): done
表示创建日志空间成功
创建文件系统命令
mke2fs命令
作用:是创建文件系统
配置文件:/etc/mke2fs.conf (用来控制默认参数)
格式:mke2fs [options] /dev/sd#n
选项:
-t {ext2|ext3|ext4}:指定新建的文件系统类型
-j:同 -t ext3,作用创建ext3 文件系统
-L ###:指定分区的卷标
-b {1024|2048|4096}:设定磁盘块大小
-g #:指定每个块组多少个磁盘块
-G #:块组的总数
-i bytes-per-inode:指定inode和字节的比例,默认是16384字节对应一个磁盘块
-I inode-size:
-U UUID:指定一个文件系统的UUID。 (通常用在磁盘数量较多的情况)
-N number-of-inodes:指定文件系统中的inode总数
-m #:指定保留空间的大小
e2label命令
作用:查看、修改卷标
格式:e2label device [newlabel]
例子:
[[email protected] ~]# e2label /dev/sdc1 myGame <<<<<< 修改卷标
[[email protected] ~]# e2label /dev/sdc1 <<<<<< 查看卷标
myGame
blkid命令
作用:查看磁盘的id信息和文件系统类型
格式:blikd DEVICE
[[email protected] ~]# blkid /dev/sdc1
/dev/sdc1: LABEL="myGame" UUID="129c8699-9809-4e15-98a1-d232e87fceca" SEC_TYPE="ext2" 【TYPE="ext3"】
设备文件 卷标 唯一标识 安全类型 文件系统类型
dumpe2fs命令
作用:显示文件系统的分区信息
选项:
-h:显示超级块信息
[[email protected] ~]# dumpe2fs -h /dev/sdc1
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name: myGame 卷标名称
Last mounted on: <not available> 最近一次的挂载点
Filesystem UUID: 129c8699-9809-4e15-98a1-d232e87fceca
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic) ???????????????
Filesystem features: has_journal ext_attr resize_inode dir_index filetype sparse_super large_file
Filesystem flags: signed_directory_hash
Default mount options: (none)
Filesystem state: clean 文件系统的状态
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 197600 【这部分内容平时就应该经常关注的】
Block count: 789185
Reserved block count: 39459
Free blocks: 759214
Free inodes: 197589
First block: 0
Block size: 4096
Fragment size: 4096
Reserved GDT blocks: 192
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 7904
Inode blocks per group: 494
Filesystem created: Wed Mar 16 16:40:22 2016
Last mount time: n/a
Last write time: Wed Mar 16 17:10:07 2016
Mount count: 0
Maximum mount count: 21
Last checked: Wed Mar 16 16:40:22 2016 上一次检查文件系统时间
Check interval: 15552000 (6 months)
Next check after: Mon Sep 12 16:40:22 2016
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 28
Desired extra isize: 28
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: 93c9bb64-26f5-48b2-b338-454f3474327f
Journal backup: inode blocks
Journal features: (none)
Journal size: 64M
Journal length: 16384
Journal sequence: 0x00000001
Journal start: 0
注意:以上内容,必须能够大部分可以读懂
tune2fs命令
作用:查看、修改文件系统的属性
可修改:
预留空间、卷标
不可修改:
磁盘块
选项:
-l:查看超级块信息,类似于 dumpe2fs -h
-L ###:修改分区的卷标,类似于 e2label DEVICE [newLabel]
-m #:修改文件系统的保留空间百分比
-j:将ext2文件系统升级为ext3。(内部数据不受影响)
fsck命令
作用:检查、修复文件系统的命令
选项:
-t fstype DEVICE: 检查指定的文件系统
-a:自动修复文件系统
-r:交互式修复
e2fsck命令
作用:修改文件系统
选项:
-y:检查过程中,如果需要用户输入Y,则自动输入。
-f:强制执行检查操作
虚拟内存
每个程序都使用一个独立的虚拟机内存空间,这个内存空间是物理内存的映射
x86架构的主机中,每个程序都认为自己独享4G的内存空间,并且认为当前主机中,只有自己一个程序。
交换分区(swap)
在windows中称为虚拟内存
指的是在硬盘上规划处一个组成方式类似于内存的空间,当内存空间不足时,将内存中闲置数据暂时移动到交换分钟
实现的效果就是可以实现内存的过载使用。
注意:
尽量不要使用swap
如果发现swap使用频繁,那么就说明需要添加内存了
free命令
作用:显示当前内存的使用情况
格式:free [options]
选项:
-m:以MB为单位显示
-g:以GB为单位显示
[[email protected] ~]# free -m
total used free shared buffers cached
Mem: 1869 290 1578 0 50 92
-/+ buffers/cache: 146 1722 <<<<<<真实内存空间的使用和空闲情况
Swap: 1983 0 1983
缓冲:存放元数据,inode中的数据
缓存: 存放数据
注意:只有缓存和缓冲中的数据可以清空,其他数据不能清空
伪文件相关
/proc/partitions:记录系统中的分区信息
/proc/meminfo:内存的使用情况
/proc/cpuinfo:记录系统中的CPU的详细信息
dd命令
作用:从底层逐字节复制文件。
格式:dd if=原文件 of=目的文件 [bs=xK|M|G count=n]
例子:将/etc/passwd复制到home下叫做a.txt
dd if=/etc/passwd of=/home/a.txt
例子:将/etc/passwd的前10K的内容复制到home下
dd if=/etc/passwd of=/home/a.txt bs=1K count=10
dd if=/etc/passwd of=/home/a.txt bs=10K count=1
例子:备份sda的MBR
dd if=/dev/sda of=/home/mbr.bak bs=512 count=1
例子:实现硬盘对考(将sda上的数据全部复制到sdb上)
dd if=/dev/sda of=/dev/sdb
新建交换分区的流程
一、新建一个分区
分区格式id必须是 82
二、安装swap文件系统
# mkswap -f /dev/sdc2
mkswap命令
作用:创建swap文件系统
格式:swap [-f -L 卷标] DEVICE
三、激活swap分区
# swapon /dev/sdc2
swapon命令
作用:激活交换分区
swapoff命令
作用:关闭交换分区
特殊场景:磁盘无剩余空间(无法再分区),但是分区中还有大量剩余空间,此情况下新建交换分区,可以用 【磁盘镜像文件】 来实现
磁盘镜像文件:就是用一个文件,来模拟当中磁盘来使用。
一、如何创建镜像文件
1、dd命令
2、特殊设备文件
/dev/zero--泡泡机
案例:在tmp下创建一个1G的文件disk.img
# dd if=/dev/zero of=/tmp/disk.img bs=1M count=1024
二、将新建的镜像文件当做磁盘来创建交换分区
1、创建文件系统
# mkswap -f /tmp/disk.img
2、激活
# swapon /tmp/disk.img
/etc/fstab详解
作用:实现开机自动挂载外部设备或者自动激活交换分区
注释
[[email protected] ~]# cat /etc/fstab
/dev/mapper/vg_zxf-lv_root / ext4 defaults 1 1
UUID=265f1a54-7f15-46 /boot ext4 defaults 1 2
/dev/mapper/vg_zxf-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
设备文件名称 挂载点 文件系统类型 挂载选项 转储频率 检查次序
/dev/sdc1 /mnt ext3 defaults 0 0
注意:交换分区的自动激活稍有特殊
交换分区到底多大?
物理内存2-4G,swap4G
物理内存<2G,swap=物理内存*2
物理内存>8G,swap=4G
mount命令
作用:挂载外部设备到linux系统
格式:mount [options] [-t fstype] [-o option] 设备名称 挂载点
用法1:直接执行mount,可以查看当前已经挂载的全部设备
options
-a:重读/etc/fstab,将其中的全部内容重新挂载
-L label:以卷标的方式进行挂载
-U UUID:以UUDI的方式进行挂载
-n:在挂载外部设备的时候,不将挂载信息写入/etc/mtab中
-t fstype:在挂载设备时候,必须指定文件系统类型。
(在指定muont命令时候,会自动调用blkid来获取文件系统类型)
-r:只读
-rw:读写
-o options
sync:同步写入
优点:安全
缺点:导致系统性能变差
async:异步写入
优点:性能好
缺点:容易丢失数据
atime:自动更新时间戳
noatime:不自动更新时间戳
diratime:
nodiratime:对目录而言,不自动更新访问时间戳
defaults:
exec:
noexec:禁止分区中的可执行程序自动运行
owner:允许普通用户挂载该文件系统 【通常不能使用此选项】
remount:重新挂载分区,在进行重新挂载的时候,可以指定额外的选项
remount,rw 重新挂载可读写
remount,rw,async,noatime,........
ro:只读文件系统
rw:读写文件系统
acl:启动acl功能
挂载命令:mount
卸载命令:umount
fuser命令
作用:查看指定的目录被哪个进程或者用户所使用
格式:fuser [选项] 目录
选项:
-v:显示目录正被哪个进程所使用
-k:杀死正在访问某个文件进程/用户
如果是对挂载点进行操作,需要结合-m
-m:是专用于挂载点的选项
df命令
作用:检查分区的使用情况
格式:df [-h]
PS:ls –ldh /mnt查看目录所在的磁盘块中的数据大小(不能看目录大小)
du命令
作用:查看目录的大小
选项:
-h:
-s:仅仅显示目标的大小
组合:
du -sh DIR
tree命令
作用:显示目录以及子目录名称
选项:
-L n:显示N级目录
链接
硬链接:
两个inode指向相同的磁盘块
特点:
硬链接和原始文件互为备份(修改一个文件,另一个随着改变)
删除原始文件,链接文件可以正常使用
【其实硬链接和原始文件就是同一个文件】
每做一个硬链接,连接数加1
软链接
【同windows中的快捷方式】
给原始文件创建一个快捷方式
特点:
软链接中,存放的是指向原始文件的路径
软链接闪烁表示链接文件被损坏
原始文件被删除,软连接文件无法访问
软链接文件的权限是777,用户真正的权限要参考原始文件
注意:
硬链接:
只能对文件创建,不能对目录创建
目录的连接数默认是2
硬链接不能跨文件系统
软链接:
可作用于目录
可以跨分区
大小是所指向的原始文件的路径的字符个数
linux文件压缩
1、gzip命令
后缀:.gz
格式:gzip file1 file2 ....
选项:
-d:解压缩
-#:指定压缩比,1-9
gzip -7 passwd
-c:将压缩结果输出到标准输出(通常用来保留原始文件)
例子:压缩passwd,要求保留原始文件
# gzip -c passwd > passwd.gz
解压缩
gunzip命令
zcat命令在不解压的情况下,查看压缩包中的内容
2、bzip2命令
后缀:.bz2
格式: 同上
选项:
-d:解压缩
-#:指定压缩比,1-9
gzip -7 passwd
-k:保留原始文件
解压缩
bunzip2
bzcat在不解压的情况下,查看压缩包中的内容
3、xz命令
后缀:xz
格式:同上
选项:
-d:解压缩
-#:指定压缩比,1-9
gzip -7 passwd
-k:保留原始文件
解压
unxz
注意:以上三个,只能压缩文件,不能压缩目录
4、zip命令
后缀:.zip
特点:压缩比低,但是可以压缩目录,而且压缩不删除原文件
【zip压缩文件,在windows和linux都支持】
格式:zip [选项] xxx.zip file1 file2 .......
选项:
-r:递归,压缩目录以及子目录中的全部文件。【压缩目录时候,通常要使用】
解压命令
unzip
compress:压缩
decompress:解压缩
uncompress: 解压缩
archive:归档
将多个文件或目录合并成一个文件,文件大小不变或稍微变大。
归档的命令tar
后缀:.tar
格式:tar [选项] -f xxxx.tar file1 file2......
选项:
-f xxxx.tar:指定归档文件的文件名
-c:创建归档
-x:展开归档
--xattrs:在创建归档的时候保留文件的扩展属性等。
-t:在不展开归档的情况下,查看其中的内容
-p:在创建归档的时候保留文件的权限和属性不变
--exclude=FILE:在创建归档的时候不对某个文件进行归档
-j:调用bzip2进行压缩和解压缩
-z:调用gzip进行压缩和解压缩
-J:调用xz进行压缩和解压缩
-v:显示过程信息
-C
例子:对home目录创建归档,归档文件名是a.tar
# tar -cf a.tar /home
例子:展开归档
# tar -xf a.tar
例子:将a.tar使用gzip进行压缩
# gzip -c a.tar > a.tar.gz
例子:将a.tar使用xz进行压缩
# xz -k a.tar
例子:将a.tar.gz解压缩并展开归档
# gzip -d a.tar.gz ==>a.tar
# tar -xf a.tar ==>a
例子:将etc init.d home归档压缩成all.tar.gz
# tar -zcvf all.tar.gz etc/ init.d/ home/
例子:将etc init.d home归档压缩成all.tar.bz2
# tar -jcvf all.tar.bz2 etc/ init.d/ home/
注意:在创建或者展开归档的时候,可以不指定压缩方式
如果不指定,那么系统自动根据文件后缀来选择压缩或解压缩方式
例子:将all.tar.gz展开
# tar -zxvf all.tar.gz
也可以
# tar -xvf all.tar.gz
PS:在创建或展开压缩的时候,不建议指定方式,让系统自己选择。
ln命令
作用:创建软\硬链接
格式:ln [-s] 原始文件 目的文件
选项:
-s:创建软链接
RAID整列
Redundant Ayyays of Inexpensive Disk 廉价冗余磁盘阵列
Redundant Ayyays of Independent Disk 独立冗余磁盘阵列
RAID
将多个物理磁盘组合成逻辑磁盘提供给用户,并提升整体读写性能。
RAID级别
(级别仅仅表示磁盘的组织方式不同)
0:条带
读写提升:读、写
冗余能力:无
磁盘数量:>=2
磁盘使用率:100%
1:镜像
读写提升:无
冗余能力:有
磁盘数量:>=2
磁盘使用率:50%
3:校验码
读写提升:读、写
冗余能力:有
最多损坏磁盘:1个
磁盘数量:>=3
磁盘使用率:(n-1)/n
【使用固定的磁盘存放校验码】
5:校验码
读写提升:读、写
冗余能力:有
最多损坏磁盘:1个
磁盘数量:>=3
磁盘使用率:(n-1)/n
【多个磁盘轮流存放校验码】
10:
读写提升:读、写
冗余能力:有
磁盘数量:>=4
磁盘使用率:50%
01:
读写提升:读、写
冗余能力:有
磁盘数量:>=4
磁盘使用率:50%
50:
读写提升:读、写
冗余能力:有
磁盘数量:>=6
磁盘使用率:(n-2)/n
jobd
读写提升:无
冗余能力:无
磁盘数量:不限制
磁盘使用率:100%
【通过jobd可以将多个物理磁盘的空间整合成一个逻辑磁盘】
RAID的实现
硬RAID
集成
独立
软RAID
使用CPU模拟生成一个RAID控制器
会导致CPU更为繁忙
要借助于MD模块
md模块
multi disk
作用:将多个物理磁盘整合成逻辑磁盘
命令实现
mdadm
特点:模式化的命令
1、创建模式
作用:创建阵列
选项: -C
模式中的子选项:
-l #:指定阵列的级别
-n #:指定创建阵列所使用的磁盘数量
-a {yes|no}:yes,表示自动创建需要的设备文件
【阵列的设备文件是/dev/md#】
-c #:指定所切割的数据块的大小,默认是512K,修改必须是512的整数倍
【chunk】
-x #:指定空闲(保留)磁盘的个数
2、管理模式
操作
添加:--add -a
删除:--del -d
3、监控模式
选项:-F
4、增长模式
选项:-G
5、装配模式
选项:-A
【如果不指定,那么默认就是管理模式】
案例1:创建一个2G的raid0
【既可以使用磁盘,也可以用分区来实现,此案例用分区实现】
1、创建两个1G的分区
注意:
1、分区类型必须修改为fd
2、不能在分区上安装文件系统
2、创建raid0
格式:mkadm -C /dev/DeviceName -a yes -l LEVEL -n 磁盘数量 磁盘1 磁盘2 ....
# mdadm -c /dev/md0 -a yes -l 0 -n 2 /dev/sdc{1,2}
3、查看当前系统中的raid信息
# cat /proc/mdstat
4、在raid0上安装文件系统
# mke2fs /dev/md0
5、挂载
# mkdir /myraid0
# mount /dev/md0 /myraid0
案例2:删除raid0
1、查看raid0的基本信息
[[email protected] mkraid0]# cat /proc/mdstat
Personalities : [raid0]
md0 : active raid0 sdc2[1] sdc1[0]
2119680 blocks super 1.2 512k chunks
2、卸载此raid0
# umount /dev/md0
3、停止此RAID0
# mdadm -S /dev/md0
4、清除此raid的超级块中的数据
# mdadm --zero-superblock /dev/sdc1 /dev/sdc2
案例3:创建一个10G的raid1
【使用物理磁盘来实现,每个物理磁盘大小是10G】
1、使用sdb和sdc创建raid1
# mdadm -C /dev/md9 -a yes -l 1 -n 2 /dev/sdc /dev/sdb
【软raid不能当做启动分区来使用】
2、检查raid1的同步情况
# cat /proc/mdstat
3、检查raid的详细信息
# mdadm -D /dev/md9
/dev/md9:
Version : 1.2
Creation Time : Wed Mar 23 17:23:44 2016
Raid Level : raid1
Array Size : 10477440 (9.99 GiB 10.73 GB)
Used Dev Size : 10477440 (9.99 GiB 10.73 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Wed Mar 23 17:24:37 2016
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Name : node2.openstack.com:9 (local to host node2.openstack.com)
UUID : 766ecba3:768f11af:590df855:a3cfdc8f
Events : 17
Number Major Minor RaidDevice State
0 8 32 0 active sync /dev/sdc
1 8 16 1 active sync /dev/sdb
4、安装文件系统
# mke2fs /dev/md9
5、挂载
# mount /dev/md9 /mnt
6、模拟raid1中一个磁盘损坏的情况【模拟sdb损坏】
# mdadm /dev/md9 --fail /dev/sdb
建议:此时检查md9的详细信息
方式:mdadm -D /dev/md9
7、修复raid1
(1)向raid1添加新磁盘
# mdadm /dev/md9 -a /dev/sdd
建议:此时检查md9的详细信息
方式:mdadm -D /dev/md9
8、删除sdb
# mdadm /dev/md9 -r /dev/sdb
阵列的停止和启动
1、停止
# mdadm -S /dev/md9
2、停止后再次启动raid
# mdadm -A /dev/md9 /dev/sdc /dev/sdd
mdadm -D --scan
可以显示系统中的raid阵列以及所使用的磁盘信息(uuid)
mdadm的配置文件,记录系统raid信息,可以用来实现快速启动raid阵列
/etc/mdadm.conf
【此文件默认不存在】
用重定向的方式,可以将系统的阵列信息保存到mdadm.conf中
mdadm -D --scan > /etc/mdadm.conf
以后再启动阵列,直接用阵列设备文件就可以,如下
#mdadm -A /dev/md9
lvm
DM:Device Mapper 设备映射
对比MD和DM
MD:将多个物理磁盘整合成一个逻辑磁盘
DM:将一个或多个物理磁盘整合成一个或多个逻辑磁盘
DM的功能
LVM2-->动态磁盘
快照
多路径
DM的核心原理
重要名词
物理卷:Physical Volume PV,可以理解物理卷就是物理磁盘
卷组:Volume Group VG,将所有物理磁盘的存储能力抽象成一个大的存储空间
逻辑卷:Logical Volume LV,从卷组中取出一部分存储空间构成一个分区
物理盘区:Physical Extend PE,只有将物理磁盘加入到卷组以后,才有PE的概念。
PE可以理解为物理卷中的一个一个存储单元。【只有进入卷组才是PE,否则不是】
逻辑盘区:Logical Extend LE.
其实pe和le是相同的东西,只是在卷组中叫做PE,在逻辑卷中叫做LE
动态磁盘的相关操作
第一类:管理物理卷的命令(pv)
创建:pvcreate
删除:pvremove
扫描:pvscan
查看:pvs,pvdisplay
移动pv上的数据:pvmove
(通常用在要卸载的磁盘上)
第二类:管理卷组的命令(vg)
创建:vgcreate
-s #K|M|G|T|E:指定PE的大小,默认是4M
删除:vgremove
扫描:vgscan
查看:vgs,vgdisplay
扩大:vgextend (其实就是向卷组中添加新的物理卷)
缩小:vgreduce
第三类:管理逻辑卷的命令(lv)
创建:lvcreate
-n xx:指定逻辑卷的名称
-L #K|M|G|T|E:指定逻辑卷的大小 (其实就是指定分区的大小)
删除:lvremove
扫描:lvscan
显示:lvs,lvdisplay
扩大:lvextend
缩小:lvreduce
sdf 3 ,sdg 5 ,sdj 10 ,sdi 15, sdh 20
案例1:将以上硬盘做成逻辑卷
1、创建逻辑卷
# pvcreate /dev/sdf /dev/sdi......
2、查看当前系统中的逻辑卷
# pvs
# pvscan
# pvdisplay
例子2:前面的基础上,创建卷组
格式:
1、加入卷组
# vgcreate myvg001 /dev/sd{f,h,i}
2、查看
# vgs
# vgdisplay
# vgscan
案例3:将前面卷组中的sdh从卷组中删除
1、移走sdh上的数据【必须执行】
# pvmove /dev/sdh
2、从vg中剔除sdh
# vgreduce myvg001 /dev/sdh
3、新建另一个卷组,名称为newvg,PE为8M
# vgcraete newvg -s 8M /dev/sd{g,h}
案例4:向newvg添加一个新的物理卷
# vgextend newvg /dev/sdj
案例5:在前面的基础上,创建一个500M的逻辑卷,名称是mylv
# lvcreate -n mylv -L 500M newvg
# lvs
# lvdisplay
逻辑卷的设备文件名称
/dev/卷组名/逻辑卷名 (只是链接)
/dev/mapper/卷组名-逻辑卷名
案例6:使用此逻辑卷
1、安装文件系统
# mke2fs /dev/newvg/mylv
2、挂载
# mount /dev/newvg/mylv /media
调整逻辑卷的大小
扩大物理边界的命令
lvextend
-L [+]#:
-L +5G: 在原来的基础上扩大5G的空间
-L 5G:扩展到5G
扩大(调整)逻辑边界命令
resize2fs
格式:resize2fs lv的设备文件 NG
选项:
-p:将全部剩余的卷组都分给逻辑卷
resize2fs /dev/newvg/mylv 100G 将逻辑分区调整为100G
resize2fs -p /dev/newvg/mylv 有多少给多少
缩小逻辑分区
resize2fs
缩小物理分区
lvreduce [-]
案例7:将前面的500M的逻辑卷扩展到800M
1、检查卷组的剩余空间
# vgs
2、调整物理边界
# lvextend -L 800M /dev/mapper/newvg-mylv
3、调整逻辑编辑
# umount /dev/mapper/newvg-mylv
# e2fsck -f /dev/mapper/newvg-mylv
# resize2fs /dev/mapper/newvg-mylv 800M
# mount /dev/mapper/newvg-mylv /media
PS:调大空间操作, 必须先卸载所挂载的逻辑卷 ,在系统异常的情况下,需要检查逻辑卷的文件文件
案例8:将前面的逻辑卷缩减为400M
1、确认磁盘使用情况
# df -h
2、卸载逻辑卷
# umount /dev/mapper/newvg-mylv
3、检查文件系统
# e2fsck -f /dev/mapper/newvg-mylv
4、缩减逻辑边界
# resize2fs /dev/mapper/newvg-mylv 400M
5、缩减物理边界
# lvreduce -L 400M /dev/mapper/newvg-mylv
6、重新挂载
快照卷
可以对系统中的重要文件进行保护。
注意:
1、新的快照卷当中是空
2、一旦出现快照卷满了,那么快照卷自动自毁
3、快照卷中的文件是只读状态的
创建快照卷的命令
lvcreate
-s:创建快照卷的专用选项
-p r|w:设置快照卷中的文件的属性 【默认是只读】
创建快照卷的命令格式:
例子:创建一个100M的快照卷,快照卷的名称是myss,这个快照卷是针对/dev/mapper/newvg-mylv
# lvcreate -s -L 100M -n myss -p r /dev/mapper/newvg-mylv
Author by:潇湘雨错