磁盘管理 : 主流的磁盘 : 机械式硬盘
常见的有 : U盘, 光盘, 软盘, 硬盘, 磁带机
扇区 : sector 磁道 : track 柱面 : cylinder
磁盘出厂时 : 低级格式化 : 划分磁盘逻辑结构,划分磁道,扇区,磁盘属性等
分区 : partition 创建多个独立的文件系统
MBR : master boot record 主引导记录 :
第0磁道0扇区 512bytes : 446bytes : bootloader 引导加载器
64bytes : 每16个标识一个分区 共能标识4个分区
2bytes : magic number 标识MBR是否有效
磁盘分区格式化 :
/
/bin, /sbin : 二进制程序,/bin普通用户使用的命令, /sbin 管理员使用的命令 ; 操作系统自身运行需要用到的程序
/usr/bin, /usr/sbin : 二进制程序, 基本的系统工具
/usr/local/bin, /usr/local/sbin : 第三方程序;
/lib
/usr/lib
/usr/local/lib
/etc
/tmp
/var
log
mail
cache
/proc : 内核映像
/sys : 硬件信息
/media
/mnt
/opt :
/boot : 引导目录,内核
/home/USERNAME, /root:
/dev :
设备类型:
b : 随机设备
c : 线性设备
硬盘设备 : 随机存取设备
I/O, I/O Controller 集成的芯片叫控制器
I/O Adapter 非集成的芯片叫适配器
IDE, ATA : 并行, 133MBPS = 133/8 Mb/s
SCSI : small computer system interface, UItraSCSI 320MBPS = 320/8MB/s
10000,15000RPM 并行
SATA : Serail, 300MBPS, 600MBPS, 6GBPS 总线速度 串行
SAS :
USB : (1.1, 2.0, 3.0) 串行
USB3.0 480MBPS
SSD : Solid-State Disk 常用的也是接到SATA口或者USB口的
Linux, /dev/
IDE, ATA: /dev/hd[a-z]
IDE : Master, Slave
第一个IDE控制器接硬盘,
第二个IDE控制接光驱, hdc
SCSI, SAS, SATA, USB: /dev/sd[a-z]
/dev/sda, /dev/sdb
文件系统: 通常由内核提供
windows :
NTFS
FAT32
Linux:
ext2
ext3
ext4
xfs
reiserfs
nfs
iso9600
jfs
brtfs
对分区格式化, 就是创建文件系统
RAW : 裸设备
低级格式化: 创建磁盘,划分磁道的
高级格式化: 创建文件系统
MBR: Master Boot Record
512bytes :
446bytes : bootloader
64bytes : 分区表, 其中每16bytes标识一个分区
2bytes : 标识当前硬盘是否可引导的 magic number
扩展分区:
再次划分为逻辑分区
fdisk, sfdisk, part
fdisk <= 15分区
fdisk -l [DEVICE]
fdisk [DEVICE]
交互式命令 :
d : 删除一个分区
n : 新建一个分区
p : 显示当前的分区情况
w : 保存退出
q : 不保存退出
l : 各分区类型所对应的system ID
83 : linux
82 : linux swap
8e : LVM 逻辑卷
fd : soft raid
t : 修改指定分区的System ID
fdisk -l /dev/sda
查看内核识别的分区信息 : cat /proc/partitions
让内核重新探测读取硬件盘分区表 : partprobe
出现warning, 红帽5上没问题,红帽6上要重启
RHEL6让内核重新读取硬盘分区表 :
partx -a [partitions] DEVICE 明确添加某一个或者所有的盘
下一步,格式化分区,用于创建文件系统
linux, mkfs
mkfs -t fstype /dev/part
RHEL5 : 默认ext3
RHEL6 : 默认ext4
mkfs -t ext3 /dev/sda3
blkid dev/sda3 : 显示设备的uuid及文件系统类型
mkfs -t ext4 = mkfs.ext4 = mke2fs -t ext4
mkfs -t ext3 = mkfs.ext3 = mke2fs -j = mke2fs -t ext3
mkfs -t ext2 = mkfs.ext2 = mke2fs = mke2fs -t ext2
配置文件 : /etc/mke2fs.conf : 用于设定默认特性,及文件系统特有的特性;
mke2fs -t {ext2|ext3|ext4}
-b {1024|2048|4096} : 块大小
块大小取决CPU对内存页框大小的支持, x86系统默认页框大小为4K;
-L label : 设定卷标
-m # : 预留给管理使用的块所占总体空间的比例
-r # : 调整预留管理使用块个数
-E : 调整文件系统扩展属性
vim /etc/mke2fs.conf 可以定义文件类型
要显示块大小 :
tune2fs -l /dev/sda3 | grep 'Block size'
-l : 显示文件系统超级块信息
-L label : 设定卷标
-m : 设定预留管理使用块所占总体空间的比例
-r # : 调整预留管理使用块个数
-o : 设定默认挂载选项
-O : 设定文件系统默认特性
-E : 调整文件系统扩展属性
e2label : 显示或设定卷标
d2label DEVICE [Volume_label]
mke2fs -t ext3 -b 1024 -L MYDATA /dev/sda3
tune2fs -l /dev/sda3 | grep 'Reserved' : 预留块大小
挂载 : mount
mount [-t fstype] DEVICE MOUNT_POINT
mount [-t fstype] LABEL="卷标" MOUNT_POINT
mount: 当前系统挂载的所有设备
umount DEVICE
umount MOUNT_POINT
挂载之后,原有数据会被隐藏,因此不能挂载到系统常用目录上
卸载之时, 要确保没有进程正在访问挂载的设备,否则,无法卸载
Track : 磁道
Sector : 扇区
Cylinder : 柱面
/etc/fstab : 系统开机会自动挂载的文件系统:
FileSystem:一个软件, 内核中实现
windows:
NTFS,FAT32
Linux: vfs(virtual file system)
usi9660
nfs
cifs
ext2, ext3, ext4, xfs, jfs,reiserfs, vfat, GFS, GFS2, OCFS2
mount -t fstype [options] DEVICE MOUNT_POINT
DEVICE :
设备文件 : /dev/sda1, /dev/hdb2
卷标: LABEL="label"
UUID: UUID="uuid"
MOUNT_POINT:
blkid PARTITION
mkfs -t [fstype] PARTITION
要点: 1.文件系统必须被支持才能使用, 即内核相应的内核模块, 或者已经将之整合进内核
2. 要有相应文件系统创建工具, 这通常是mkfs.fstype
mkfs -t ext2 = mkfs.ext2 = mke2fs
mkfs -t ext3 = mkfs.ext3 = mke2fs -j = mke2fs -t ext3
mkfs -t ext4 = mkfs.ext4 = mke2fs -t ext4
mkfs -t xfs = mkfs.xfs
mke2fs
-t
-L
-m
-b
-E
tune2fs
-l
e2label
mount
-o : 用于指定挂在选项,常用的挂载选项
ro : 只读挂载
rw : 读写,默认即为读写
moatime : 关闭 更新 访问时间
auto : 是否能够由"mount -a"挂载
defaults : 相当于rw,suid, dev,exec,auto,nouser,async,and relatime
sync:同步写入
async:异步写入
dev : 允许启用设备文件
remount : 重新挂载
loop : 本地回环设备
mount -o remount,other_options DEVICE
cdrom -->sr0
cdrom --> hdc
mount -o loop,other_options DEVICE MOUNT_POINT: 用于挂载回环设备
-n : 挂载文件系统时, 不更新/etc/mtab文件
-r : 相当于 ""-o ro",只读挂载
fuser /media/
fuser -km /media/
umount /media/
fuser [MOUNT_POINT] :查看正在访问某挂载点的进程
fuser -km [MOUNT_POINT] : 强行杀死正在访问次挂载点的进程
/etc/fstab
挂载的设备 :
设备文件,卷标,uuid
挂载点 :
文件系统类型 : ext2,ext3,...
挂载选项: defaults 表示使用默认选项,多个选项之间逗号分隔
转储频率 : dump
0: 从不备份
1: 每日备份
2: 每隔一天备份
自检次序 :
0: 不检测
1 : 第一个检测 : 一般只有根文件系统被第一个检测
2 :
9 :
mount -a : 挂载 /etc/fstab所有支持auto挂载选择的文件系统
Linux的交换分区: swap
必须是独立分区,独立文件系统
交换分区多大?
科学计算类的服务器: 交换内存可以尽可能大, 比如为物理内存的2倍
应用程序类的服务器, 交换内存尽可能小, 比如只给1G
物理内存小于2G, swap=memory*2
2G<memory<4G swap=memory*1.5
memory>4G , swap=4G
如何查看内存大小
free
-m : 换算为MB
-g : 换算为GB
shared : 共享内存
buffer : 缓冲
cache : 缓存
创建交换分区 :
mkswap DEVICE
启用交换分区 :
swapon DEVICE : 启用指定交换分区
swapon -a : 启用所有交换分区
禁用交换分区 :
swapoff DEVICE
swapoff -a
开机自动启用交换分区,可定义于/etc/fstab
DEVICE swap swap defaults 0 0
挂载点: swap
文件系统 : swap
SysV风格的网络服务脚本
# service network restart
# /etc/rc.d/init.d/network start
# /etc/init.d/network
vim service.sh
#!/bin/bash
#
srvname=`basename $0`
lockFile=""/var/subsys/$srvname"
if [ $# -lt 1 ]; then
echo "Usage:$srvname {start|stop|restart|status}"
exit 3
fi
if [ $1 == 'start' ]; then
if [ -e $lockFile ]; then
echo "$srvname is running..."
else
touch $LockFile &> /dev/null
echo "Start $srvname successfully."
fi
elif [ $1 == 'stop' ]; then
if [ -e $lockFile ]; then
rm -f $lockFile &> /dev/null
echo "Stopping $srvname finished."
else
echo "$srvname is stopped."
fi
elif [ $1 = 'restart' ]; then
rm -f $lockFile $> /dev/null
touch $LockFile &> /dev/null
echo "Restarting $srvname finished."
elif [ $1 = 'status' ]; then
if [ -e $lockFile ]; then
echo "$srvname is running."
else
echo "$srvname is stopped."
fi
else
echo "Usage:$srvname {start|stop|restart|status}"
exit 4
fi
文件系统 :
rootfs : 根文件系统
/var/log/messages
叶子节点 : 文件
挂载 :
分区 : mkfs, mke2fs
mkfs -t xfs
高级格式化: 创建文件系统的
文件系统,管理文件,实现文件的按名存取;
文件系统: 位于内核当中
系统调用
open(),close,read,write,create,delete
磁盘的第0个扇区,磁盘最前面的是
MBR : Master Boot Record 引导整个磁盘的操作系统
446 : bootloader
64 : 16*4文件分区表
2 : 5A 可引导的
Boot block : 1024bytes,头两个扇区,引导块 引导哪个分区上的操作系统
index: 索引中存储 : 大小,权限,属主,属组,时间戳,对应的磁盘块,块指针,
小文件用块指针,大文件用二级指针,再大就用三级指针
每一个条目称为inode (index node),所存储的数据称为元数据 : MetaData inode number
条目都有一个编号叫inode 每一个条目128个字节
/ 根是自引用的
为了避免全表扫描去找空闲磁盘块,使用bitmap
block bitmap
inode bitmap
block
block group : 块组
100w : 5w个块, 20组;
块组0 里边第1024个字节以后的字节叫超级块
Super Block; GDT; Block Bitmap; inodeBitmap; InodeTable; DataBlocks
Super Block并不是每一个块组里都有, 只是在有些组里面有备份,一般在0,1,3,5,7,9
GDT : group description table
tune2fs -l
显示超级块信息
dumpe2fs : 输出ext文件系统信息
-h : 也可以显示超级块信息
du : disk usage
-s : summary, 显示某指定路径下所有文件的大小之和
-h : human-readable
df : disk free 磁盘空闲空间量
-l : 只显示本地文件系统
-h : human-readable
-P : posix兼容的风格显示
-i : 显示inode使用信息, 而非1k块
删除, 移动, 复制
链接文件 :
硬链接 : 比如指向同一个inode的两个不同路径
ls -l: 第二段显示出的数字指文件被硬链接的次数
特性 :
不能跨分区使用;
不能对目录创建硬链接;
删除原文件路径,不影响链接文件的使用
所有文件指向同一个inode, 因此, 为同一个文件
软链接,符号链接,symblc link
ls -l : 显示文件类型为1的文件
bash中测试文件是否为符号链接文件,使用
-L或-h
特性 :
不受分区限制;
能够对目录创建;
删除原文件,链接文件将无法使用
链接文件与源文件指向不同的inode,所以,并非同一个文件
ln [-s] SRC_FILE LINK_FILE : 有-s创建符号链接文件,没有-s创建硬链接文件
-v : verbose : 显示详细过程
ext文件系统 : 扩展属性
lsattr
chattr +|-|= [options]
i : 只读
a : 只能追加
文件压缩, 解压缩, 归档
压缩格式 : gz, bz2, xz, zip, Z
压缩算法: 算法不同, 压缩比也会不同
compress : FILENAME.Z
uncompress
gzip : .gz
gzip /PATH/TO/SOMEFILE : 压缩完成后会删除原文件
-d : 解压缩
-# : 1-9, 指定压缩比,默认是6:
gunzip : gunzip /PATH/TO/SOME_FILE.gz : 解压完成后会删除原文件
zcat /PATH/TO/SOMEFILE.gz : 不解压的情况下, 查看文本文件的内容
bzip2 : .bz2
比gzip有着更大压缩比的压缩工具
bzip2 /PATH/TO/SOMEFILE
-d
-# : 1-9, 默认是6
-k : 压缩时保留原文件
bunzip2 /path/to/somefile.bz2
xz : .xz
xz /PATH/TO/SOMEFILE
-d
-# : 1-9, 默认是6
-k : 压缩时保留原文件
unxz
xzdec 也可以解压
xzcat
zip : 既归档又压缩的工具
zip FILENAME.zip FILE1 FILE2 ... : 压缩后不删除原文件
unzip FILENAME.zip
tar : 归档工具 .tar
-c : 创建归档文件
-f FILE.tar: 操作的归档文件
-x : 展开归档
--xattrs : 归档时,保留文件的扩展属性信息
-t : 不展开归档,查看归档的哪些文件
-C : 展开到指定目录
tar -xf file.tar -C /tmp/files
xzcat : 不解压查看内容
-zcf : 归档并调用gzip压缩
-zxf : 调用gzip解压缩并展开归档
-jcf : bzip2
-jxf :
-Jcf : xz
-Jxf :
cpio : 归档工具
IDE或SATA硬盘属性管理工具 :
# hdparm
补充命令 :
dd : convert and copy a file
copy: 复制文件
dd : 复制0 1 底层代码的
dd if=/path/to/src_file 源文件
of=/path/to/dst_file 目标文件
bs=1024 | 2k 复制1024个字节的块大小
count=2 复制两个块
dd if=/var/file of=/tmp/file
可以不复制完,可以复制多少字节
MBR备份
dd if=/dev/sda of=/root/sda_mbr.backup bs=512 count=1 MBR备份
dd if=/sda_mbr.backup of=/dev/sda bs=512 count=1
dd if=/dev/zero of=/root/testfile bs=4k count=1024
/dev/zero : 0生成器
/dev/null : 位桶
练习 : 写一个脚本
从键盘让用户输入几个文件,脚本能够将此几个文件归档压缩成一个文件
read :
-p : PROMPT 给出提示
#!/bin/bash
2 #
3 read -p "input three files" FILE1 FILE2 FILE3
4 read -p "Destination:" DEST
5 read -p "Compress[gzip|bzip2|xz]" COMP
6
7 case $COMP in
8 gzip)
9 tar -zcvf ${DEST}.tar.gz $FILE1 $FILE2 $FILE3 ;;
10 bzip2)
11 tar -jcvf ${DEST}.tar.bz2 $FILE1 $FILE2 $FILE3 ;;
12 xz)
13 tar -cf ${DEST}.tar $FILE1 $FILE2 $FILE3
14 xz ${DEST}.tar
;;
15 *)
16 echo "Unknown"
17 exit 9
;;
18 esac
while循环 : 适用于循环次数未知的场景
语法:
while CONDITION; do
statement
...
done
每隔5秒钟判断hadoop用户有没有登录
#!/bin/bash
#
who | grep 'hadoop' &> /dev/null
RETVAL=$#
while [ $RETVAL -ne 0 ]; do
sleep 5
who | grep 'hadoop' &> /dev/null
RETVAL=$#
done
echo "hadoop is logged in"
写一个脚本:
1) 显示一个菜单给用户:
d|D) show disk usages.
m|M) show memory usages.
s|S) show swap usages.
*) quit.
2) 当用户给定选项后显示相应的内容;
扩展:
当用户选择完成,显示相应信息后,不退出;而让用户再一次选择,再次显示相应内容;除了用户使用quit;
#!/bin/bash
#
raid及mdadm
IDE : 133Mbps 并行
SATA:300Mbps, 600Mbps, 6Gbps 串行
USB 3.0 : 是480Mbps 串行
SCSI : Small Computer System Interface
10K,15K 并行
SAS : 2.5英寸
RAID : Redund ant Arrays of Independent Disks
级别: 仅代表磁盘组织方式不同,没有上下之分;
0 : 条带 性能提升:读,写
没有冗余能力(冗错能力)
空间利用率: nS
至少2块盘
1 : 镜像 性能表现:写性能下降,读性能提升
冗余能力有
空间利用率 : 1/2
至少2块盘
4 : 校验码
5 : 轮流校验 性能表现: 读,写提升
冗余能力有
空间利用率: (n-1)/n
至少3块盘
10 性能表现 : 读写都提升
冗余能力有
空间利用率1/2
至少4块盘
01 性能表现: 读,写提升
冗余能力有
空间利用率 1/2
至少4块盘
50 性能表现 : 读,写提升
冗余能力有
空间利用率 (n-2)/n
至少6块盘
jbod : 多个盘连接成一个盘
性能表现 : 无提升
冗余能力: 无
空间利用率 100%
至少2块
硬件RAID
软件RAID
逻辑RIAD:
/dev/md#
md : 内核模块
mdadm : 将任何块设备做成RAID
模式化的命令:
创建模式
-C
专用选项
-l : 级别
-n : 设备个数
-a : 自动为其创建设备文件
-c : CHUNK大小 2^n, 默认为64K
-x #: 指定空闲盘个数
管理模式
--add, --remove, --fail
监控模式
-F
增长模式
-G
装配模式
-A
查看RAID阵列的详细信息
mdadm -D /dev/md#
--detail
RAID0
2G :
4 : 512MB
2 : 1G
mdadm -C /dev/,d0
RAID1
2G :
2 : 2G
mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sda{5,6}
cat /proc/mdstat
停用阵列
mdadm -S /dev/mad0
--stop
mdadm -A /dev/md1 /dev/sda7 /dev/sda9
去掉错误的盘
mdadm /dev/md1 -r /dev/sda8
装配进新盘
mdadm /dev/md1 -a /dev/sda9
watch : 周期性的执行指定命令, 并以全屏方式显示结果
-n # : 指定周期长度,默认单位为秒,默认为2
格式: watch -n # 'COMMAND'
将当前RAID信息保存至配置文件, 以便以后进行装配 :
mdamd -D --scan > /etc/mdadm.conf
mdadm -S /etc/md0 停用
mdadm -A /etc/md0 启用
RAID5 :
2G: 3, 1G
通常用的RAID10
速度
可用性
镜像,mirror,校验码
MD: Multi
mdadm : 用户空间工具,管理工具
MD,DM
/dev/md#
meta device
DM : Device Mapper
逻辑设备
RAID,LVM2
DM : LVM2
快照
多路径
fdisk /dev/sda
新建两个盘,8e : LVM 格式
partprobe /dev/sda
pv
pvcreate /dev/sda{10,11} 创建PE
pvs 或者 pvdisplay 显示创建的PE
pvscan
vg
vgcreate, vgremove,
创建vg : vgcreate myvg /dev/sda{10,11}
vgcreate VG_NAME /PATH/TO/PV
-s# : PE大小, 默认为4MB
vgcreate myvgs -s 8M /dev/sda{10,11}
缩小vg,拿掉一个pv
pvmove /dev/sda11 挪走pv上数据
vgreduce myvg /dev/sda11
擦除pv
pvremove /dev/sda11
添加pv
pvcreate /dev/sda11
vgextend myvg /dev/sda11
lv
lvcreate, lvremove, lvextend
lvcreate -n LV_NAME -L #G VG_NAME
lvcreate -L 50M -n testlv myvg
lvs, lvdisplay,
创建好后格式化
mke2fs -j /dev//myvg/testlv
挂载
mount /dev/myvg/testlv /mnt
ls /mnt 显示一个新的分区
移除一个逻辑卷
lvremove /dev/myvg/testlv
一.扩展逻辑卷 不影响数据:
lvextend
-L [+]# /PATH/TO/LV 物理边界
resize2fs -p /PATH/TO/LV 逻辑边界
二.缩减逻辑卷 不影响数据
注意: 1.不能在线缩减,先要卸载
2.确保缩减后的空间大小依然能存储原有的所有数据;
3.在缩减之前应该先强行检查文件,以确保文件系统处于一致性状态;
1, df -lh
2, e2fsck -f /dev/myvg/testlv
3, resize2fs /PATH/TO/LV 2G
lvreduce -L [-]# /PATH/TO/LV
三.快照卷
1. 生命周期为整个数据时长,在这段时长内,数据的增长量不能超出快照卷大小;
2. 快照卷应该是只读的;
3. 跟原卷在同一卷组内;
lvcreate
-s
-p r|w
lvcreate -L # -n SLV_NAME -s -p r /PATH/TO/LV