添加新硬盘后不重启服务器就使用
通过重新扫描SCSI (注: Small Computer System Interface, 小型计算机系统接口)总线并添加SCSI设备, 就可以扩展系统的物理卷磁盘空间, 而不需要重启虚拟机.
ls /sys/class/scsi_host/ #注: 里面有几个设备就echo几个
echo "- - -" > /sys/class/scsi_host/host0/scan
echo "- - -" > /sys/class/scsi_host/host1/scan
echo "- - -" > /sys/class/scsi_host/host2/scan
#使用下面命令来检查SCSI设备的名称, 然后重新扫描SCSI总线
ls /sys/class/scsi_device/
echo 1 > /sys/class/scsi_device/0\:0\:0\:0/device/rescan
echo 1 > /sys/class/scsi_device/2\:0\:0\:0/device/rescan
设置开机挂载
系统挂载的一些限制:
1.根目录必须挂载, 而且一定要先于其他mount point被挂载起来
2.其他挂载点必须为已新建的目录, 可任意指定, 但一定要遵守必须的系统目录架构原则
3.所有挂载点在同一时间内, 只能挂载一次
4.所有分区在同一时间内, 只能挂载一次
5.如果进行卸载, 你必须先将工作目录移到挂载点(及其子目录) 之外
1. 开机挂载/etc/fstab及/etc/mtab
cat /etc/fstab
# /etc/fstab
# Created by anaconda on Wed Jul 4 15:27:49 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
#
/dev/mapper/vg_linuxofalex-lv_root / ext4 defaults,acl,usrquota,grpquota 1 1
UUID=a1757913-f588-48c0-9d4b-326ee874aa18 /boot ext4 defaults 1 2
/dev/mapper/vg_linuxofalex-lv_swap 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
其中的六个字段非常重要, 一定要背下来!!!
#第一列: 文件(设备)名或卷标名Label, 系统默认使用Label名称
# 注: 设备名与插槽有关, 不可随意设置
#第二列: 挂载点(mount_point), 一定是目录
#第三列: 文件系统, 此列在/etc/fstab文件中必填
#第四列: 文件系统参数, defaults为rw,auto,nouser,async,suid,dev,exec
#第五列: 是否能被dump命令作用. 0: 不做dump备份 1: 每天备份 2: 不定期备份
#第六列: 是否以fsck检查扇区. 开机时=> 0: 不检查 1: 最早检查(一般根目录设为1) 2: 稍后检查
#必须测试新添配置是否写对, 否则可能会导致系统无法顺利开机!!!
mount -a
df -h
/etc/fstab 是开机时的配置文件, 真正实时更新挂载的配置文件是 /etc/mtab 和 /proc/mounts , 万一你的/etc/fstab配置文件写入错误, 系统无法顺利开机而进入单用户维护模式, 那时候/是ro状态, 无法修改/etc/fstab, 也无法更新/etc/mtab, 可用以下方法:
mount -n -o remount,rw /
2. 特殊设备loop挂载 (镜像文件不刻录就挂载使用)
什么是loop设备?
#loop设备是一种伪设备, 是使用文件来模拟块设备的一种技术, 文件模拟成块设备后, 就像一个磁盘或光盘一样使
#用. 在使用之前, 一个loop设备必须要和一个文件进行连接. 这种结合方式给用户提供了一个替代块特殊文件的接
#口. 因此, 如果这个文件包含有一个完整的文件系统, 那么这个文件就可以像一个磁盘设备一样被 mount 起来.
#之所以叫loop设备(回环), 其实是从 文件系统 这一层来考虑的, 因为这种被mount起来的镜像文件它本身也包含
#文件系统, 通过loop设备把它mount起来, 它就像是文件系统之上再绕了一圈的文件系统, 所以称为loop.
2.1 挂载光盘/DVD镜像文件
mount -o loop /root/centos5.2_x86_64.iso /mnt/centos_dvd
df -h
umount /mnt/centos_dvd #使用完成后别忘了卸载
2.2 新建大文件以制作loop设备文件
在原本分区不改动原有环境的情况下制作出你想要的分区, 尤其是想玩Linux上的虚拟机的话, 也就是将一台Linux主机再切割成数个独立的文件系统, 配合loop device的文件类型来进行根目录的挂载, 非常有用.
#1. 制作大文件
dd if=/dev/zero of=/home/loopdev bs=1M count=1000
#2. 格式化
mkfs -t ext3 /home/loopdev
#3. 挂载
mount -o loop /home/loopdev /mnt/loopdev #注: 先分清文件和挂载点的大小, 否则可能无法挂载
df -h
2.3 补充
一般在linux中会有8个loop设备, 一般是 /dev/loop0~loop7 , 可用通过 losetup -a 查看所有的loop设备, 如果命令没有输出就说明所有的loop设备都没有被占用, 你可以按照以下步骤创建自己的loop设备.
#1. 创建一个文件
dd if=/dev/zero of=/var/loop.img bs=1M count=10240
#2. 使用losetup将文件转化为块设备
losetup /dev/loop0 /var/loop.img
#3. 通过lsblk查看刚刚创建的块设备
lsblk | grep loop0
losetup -a
#4. 当然,你也可以将这个块设备格式化并创建其他的文件系统,然后再mount到某个目录,有点多余啊,一般人不
#这么干
#5. 要删除这个loop设备可以执行以下命令
losetup -d /dev/loop0
内存交换空间(swap)的创建
swap是用来暂时放置内存中的信息, 所以用到swap时, 你的主机硬盘灯都会亮个不停.
- 1.如果你的linux主机系统可以进入“休眠”模式的话, 那么运行当中的程序状态会被记录到swap中, 以作为“唤醒”主机的状态依据.
- 2.某些程序在运行时, 本来就会使用swap的特性来存放一些数据段.
1. 使用物理分区构建swap
#1. 分区
fdisk /dev/sdc #注意修改为交换分区的系统ID为82 (Hex code)
partprobe #此操作很重要, 不要忘记让内核更新分区表
#2. 格式化
mkswap /dev/sdc7
#3. 使用
swapon /dev/sdc7
#4. 查看
free -m
swapon -s #列出目前使用swap的设备有哪些.
2. 使用文件构建swap
#1. 新建文件
dd if=/dev/zero of=/tmp/swap bs=1M count=3072
#2. 格式化
mkswap /tmp/swap #这个命令使用时要特别小心, 因为弄错字节, 可能会是你的系统挂掉!!!
#3. 使用
swapon /tmp/swap
swapon -s
#4. 关闭
swapoff /tmp/swap
3. swap使用上的限制
3.1 在内核2.4.10版本以后, 单一swap已经没有2GB的限制
3.2 最多仅能创建32个swap
3.3 由于目前x86_64(64位)最大内存寻址到64G, 因此, swap总量最大仅能达64G
磁盘的挂载与卸载
1. 挂载
挂载前, 先确定几件事:
1.单一的文件系统不应挂载在不同的挂载点(目录)中
2.单一目录不应挂载多个文件系统(挂载后目录中原本的内容会暂时消失)
3.作为挂载点的目录理论上应该是空目录
#mount -a
#mount [-l]
#mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n] 设备文件名 挂载点
-a --all, 依据配置文件/etc/fstab内的数据将所有未挂载的磁盘都挂载上
-l 增加label名称
-t --type, 选择指定文件系统挂载
-L 指定卷标名挂载
-n --no-mtab, 挂载时不实时地在/etc/mtab添加记录
-o --option, 后加挂载时的额外参数
ro, rw 挂载的文件系统为只读(read-only), 读写(read-write)
synv, async 文件系统是否同步写入的内存机制
auto. noauto 是否允许此分区被mount -a自动挂载
dev, nodev 是否允许此分区中创建设备文件
exec, noexec 是否允许此分区中含有二进制文件
suid, nosuid 是允许此分区含有suid/sgid文件格式
user, nouser 是否允许此分区被一般用户挂载
defaults 默认选项为 rw, async, auto, dev, exec, suid, nouser
remount 重新挂载, 再系统出错或重新更新参数时很有用
usrquota 启动文件系统时支持磁盘配额模式
grpquota 启动文件系统时对群组支持磁盘配额模式
#注: 光驱,软盘等挂载后需要卸载才能退片
#为什么没用-t选项, 即没有指定文件系统类型就可以进行挂载?
# 系统主要参考以下两个文件:
# 1. /etc/filesystems 系统指定的测试挂载文件系统类型
# 2. /proc/filesystems Linux系统已经加载的文件系统类型
#Linux系统支持文件系统的驱动程序都写在如下目录中:
# /lib/modules/$(uname -r)/kernel/fs/
#挂载U盘
#(U盘不能是NTFS的文件系统, 但Linux系统下载并安装对应驱动后, 可使用NTFS的文件系统)
mount -t vfat -o iocharset=cp950 /dev/sda1 /mnt/flash
#若带有中文文件名的数据时, 可在挂载时指定一下挂载文件系统所使用的语言, cp950是中文语系
#重新挂载根目录或挂载不特定目录 (根目录不可被卸载)
#实例: 将根目录重新挂载, 并加入rw和auto参数
mount -o remount,rw,auto /
# 当你进入单用户维护模式时, 你的根目录通常被系统挂载为只读, 这个时候这个命令太重要了
#额外挂载某个目录
mount --bind /home /mnt/home
--bind -B, Remount a subtree somewhere else (so that its contents are available in \
both places), 可在某些不支持软连接的程序中运行
#使用Label name进行挂载的方法
dumpe2fs -h /dev/hdc6 | grep "volume"
mount -L "卷标名" /mnt/hdc6
#此种挂载的好处:系统不必知道该文件系统所在的接口与磁盘文件名
2. 卸载
#umount [-fn] 设备文件名或挂载点
-f 强制卸载, 可用在类似网络文件系统(NFS)无法读取到的情况下
-n 不更新/etc/mtab文件的情况下卸载
磁盘参数修改
#mknod
#e2label
#tune2fs
#hdparm
磁盘配额(quota)的应用与实践
用途:
1.用户使用限制
2.用户组使用限制
3.以Link的方式使邮件作为限制的配额(更改/var/spool/mail这个路径)
通常用于原有磁盘分区的规划不好却又不想改变原有主机架构时.
#不改动既有系统的quota实例
#/home (为独立分区) 和/var/spool/mail不在同一个文件系统中, 如何进行quota限制?
#1. 将/var/spool/mail这个目录完整的移动到/home下
#2. ln -s /var/spool/mail /home/mail 新建连接数据
#3. 将/home进行quota设置
使用限制:
1. 仅能针对文件系统
2. 需要内核支持
3. Quota的日志文件
4. 只对一般用户有效
规范设置选项:
针对整个文件系统进行限制:
1.容量(block)和文件数量(inode)的限制
2.soft/hard
3.宽限时间(grace time)
超过宽限时间, soft限制值会即刻替代hard作为quota的限制.
实践quota流程
1. 文件系统支持
若你规划的某目录(例如/home)不是独立文件系统, 则你需要对此目录所在的整个分区进行限制.
#本次生效:
mount -o remount,usrquota,grpquota /home
#当你重新挂载时, 系统会更新/etc/mtab, 所以你必须要确定usrquota, grpquota已加到你需要设置的文件系统中
#直接修改/etc/ftab已永久生效
vim /etc/fstab
LABEL=/home /home ext3 default,usrquota,grpquota 1 2
umount /home
mount -a
mount | grep home
#强调: 修改完/etc/ftab后, 一定要验证, 修改错误会导致系统不能开机完全.
2. 新建quota配置文件
quota到底是如何操作的:
2.1 分析整个文件系统中用户(用户组)拥有的文件总数(inode)和总容量(block)
2.2 将这些数据记录该文件系统的最顶层目录
2.3 根据配置文件的限制值去规定磁盘使用量
#quotacheck - scan a filesystem for disk usage, create, check and repair quota files.
#扫描文件系统并新建配置文件, 在该文件系统最顶层生成aquota.group, aquota.user
#用法:
#quotacheck [-avugfM] [/mount_point]
-a --all, 扫描所有在/etc/mtab中有usrquota和grpquota支持的文件系统
-v --verbose, 显示扫描过程信息
-u --user, 指定用户的文件和目录使用情况, 会新建quota.user文件
-g --group, 指定用户组的文件和目录使用情况, 会新建quota.group文件
-f --force, 强制扫描文件系统, 并新建quota配置文件(危险)
-M --try-remount, 强制以读写方式扫描文件系统, 只在特殊情况下使用
#-f, -M选项一般用在有特殊需求, 需要重新扫描已挂载的文件系统时.
quotacheck -avug #只需记住这个就好, quota.user和quota.group会根据操作自动同步
3. quota的启动, 关闭与限制值的设置
#1. quotaon [-avug]
#此命令几乎只在第一次启动quota才需要执行, 因为下次启动系统时, /etc/rc.d/rc.sysint会自动执行这个命令.
#2. quotaon [-uvg] [/mount_point]
quotaon -uv /var #指定文件系统(分区)挂载
#1. quotaoff [-avug]
#2. quotaoff [-ugv] [/mount_point]
#edquota - edit user quota
#1. edquota [-u username] [-g groupname] 对用户(用户组)进行编辑
# Filesystem blocks soft hard inodes soft hard
#block的单位均为KB, soft/hard为0时, 表示没有限制.
#2. edquota -t 设置宽限时间
#3. edquota -p 模范账号 -u 新账号 prototype. n.原型; 标准; 模范
4. quota限制值的报表
#一: 针对用户或用户组:
#1. quota [-uvs] [username]
#2. quota [-gvs] [groupname]
-s --human-readable
#二: 针对文件系统:
#repquota - summarize quotas for a filesystem
#repquota -a [-ugvs]
5. 测试与管理
#warnquota - send mail to users over quota
#1. 依据/etc/warnquta.conf的设置, 找到目前系统上超出soft限制(即意味着有grace time的用户)的账号, 发送邮件至对应用户邮箱. (在MESSAGE内 | 表示断行)
#2. warnquota不会自动执行, 需要手动执行. 若需要自动执行, 需要创建/etc/cron.daily/warnquota.sh并写入/usr/sbin/warnquota
#setquota - set disk quotas, 直接在命令中进行quota设置
#setquota [-u|-g] 名称 block(soft) block(hard) inode(soft) inode(hard) 文件系统
#实例: 给予用户alex磁盘使用量100000, 200000的限制
setquota -u alex 100000 200000 0 0 /home
磁盘阵列RAID
RedundantArrays of Inexpensive Device, 容错廉价磁盘阵列
==小磁盘合成大磁盘==
优点:
1.数据安全可靠, 磁盘损毁时还可使用
2.读写性能佳
3.容量大
1. 六种等级, 各有特点.
(1) RAID-0 (等量模式, stripe), 性能最佳
数据被等量的放到各个磁盘上, 因此组成的磁盘越多, 性能越加, 因为每块磁盘负责的数据量更低了
**只要有一块文件损毁, 在RAID上的所有文件都会丢失而无法读取**
容量不同的磁盘组成RAID-0, 当小容量的磁盘被填满后, 数据会被写入大容量的磁盘中, 此时读写性能变差
(2) RAID-1 (镜像模式, mirrio) , 完整备份
同一份数据完整的保存在两块磁盘上
整体的RAID容量几乎少了一半
(3, 4) RAID 0+1, RAID 1+0
至少需要**四**块磁盘
RAID 0+1: 先让两块磁盘组成RAID-0, 这样的设置共有2组, 然后将两组RAID-0整合成一组RAID-1
反过来, 就是RAID 1+0
(5) RAID-5, 性能与数据备份的均衡考虑
至少需要**三**块磁盘, RAID-5的总容量是**整体磁盘容量减一块**
类似RAID-0, 循环写入时每块磁盘还加入一个**同位检查数据(Parity)**, 这个数据会记录其他磁盘的备份数据, 用于当有磁盘损毁时的**救援**, 当损毁的磁盘数量大于等于两块时, 这整组RAID-5就毁了
RAID-6, 允许损毁的磁盘数量可以达到两块
(6) Spare Disk, 预备磁盘的功能
磁盘损毁换新时, **磁盘阵列主动重建(rebuild)**, 因此需要**预备磁盘(spare disk)**的帮助
手动拔插硬盘, 通常需要关机, 因此你的磁盘阵列支持热拔插就完美了
2. 软件磁盘阵列的设置
硬件磁盘阵列(hareware RAID)是通过磁盘阵列卡来完成数组的目的
软件磁盘阵列(software RAID)是通过软件来仿真数组的任务, 因此会损耗较多的系统资源
madam这套软件会以分区或磁盘为单位, 也就是说, 不需要两块以上的磁盘, 只要你有两个以上的分区就能够设计你的磁盘阵列了
2.1 规划
#以分区为例, 硬盘相同
# 1.1 用N个分区组成RAID
# 1.2 每个分区确定容量, 最好容量一致.
# 1.3 用M个分区设置为sparedisk
# 1.4 这些sparedisk最好和RAID的所需分区一样大
# 1.5 将此RAID5设备挂在到/mnt/raid目录下
2.2 以madam创建RAID, 查看状态
#创建
#madam --create --auto=yes /dev/md[0-9] --raid-devices=N --level=[015] --spare-devices=N /dev/sdx /dev/hdx ...
--create 为新建RAID的参数
--auto=yes 决定后面新建软件磁盘阵列设备的名称, 如/dev/md0, /dev/md1等
--raid-devices=N 使用几个磁盘作为RAID的设备
--level=[015] 设置这组RAID的等级
--spare-devices=N 使用几个磁盘作为RAID的备用设备
--detail 显示后面RAID的详细信息
#后面这些这些设备文件名可以是整块磁盘, 如/dev/sdb, 也可以是分区, 如/dev/sdb1之类
#不过这些设备文件名的总数必须要等于--raid-devices与--spare-devices之和
#实例:
madam --create --auto=yes /dev/md0 --raid-devices=4 --level=5 --spare-devices=1 /dev/sda{6,7,8,9,10} #通过{}将重复的项目简化
#查看
#1. madam --detail /dev/md0
#2. cat /proc/mdstat
2.3 格式化, 挂载使用
mkfs -t ext4 /dev/md0
mount /dev/md0 /mnt/raid
df -h
3. 仿真RAID错误的救援模式
#madam --manage /dev/md[0-9] [--add 设备] [--remove 设备] [--fail 设备]
--add 将后面的设备添加到md中
--remove 将后面的设备从这个md中删除
--fail 将后面的设备配置成出错的状态
3.1 设置磁盘为错误(fault)
madam --manage /dev/md0 --fail /dev/sdb6
3.2 将出错的磁盘上删除并加入新磁盘
madam --manage /dev/md0 --remove /dev/sdb6 --add /dev/sdb11 #注: 预备磁盘会自动重建数据
4. 开机启动RAID并自动挂载
software RAID的配置文件为 /etc/madam.conf, 只要知道/dev/md0的UUID就能设置这个文件
madam --detail /dev/md0 | grep UUID
vi /etc/madam.conf
ARRAY /dev/md0 UUID=7c60c049:57d60814:bd9a77f1:57e49c5b #为什么要修改配置文件?
vi /etc/fstab
/dev/md0 /mnt/raid ext3 default 1 2
umount /dev/md0 ; mount -a ; df /mnt/raid
5. 关闭软件RAID(重要!)
==如果只将/dev/md0卸载, 没有将RAID关闭, 结果就是将来你在重新分区/dev/sdbx的时候, 可能会出现一些莫名的状况, 所以才需要关闭RAID的步骤==
#1. 先卸载且删除配置文件内与这个/dev/md0有关的设置
umount /dev/md0
vi /etc/madam.conf
#ARRAY /dev/md0 UUID=7c60c049:57d60814:bd9a77f1:57e49c5b
vi /etc/fstab
#/dev/md0 /mnt/raid ext3 default 1 2
#2. 直接关闭/dev/md0的方法
madam --stop /dev/md0
--stop -S, deactive array, releasing all resources
6. 删除RAID
# 1. 停止运行RAID
mdadm -S /dev/md0
# 2. 删除自动配置文件
> /etc/mdadm/mdadm.conf
# /etc/mdadm/mdadm.conf文件中关于该md0的配置信息删除即可
# 3. 删除/etc/fstab内关于RAID的挂载信息
# 4. 删除元数据
mdadm --zero-superblock /dev/sdb{6,7,8,9,10}
本文基于<鸟哥的Linux私房菜>以及网上搜索的相关资料, 归纳整理, 在此致谢鸟哥.