文件系统块:
- 文件系统选择的块大小有讲究,一般存放文件比较大选择4096,存放的文件比较小则选择1024或者2048。LINUX默认支持1K、2K、4K)
- 文件系统的块大小在创建文件系统时可以设定,之后不可以改,如果要改只能重新创建文件系统。
- 设置块大小定为4K
mkfs.ext4 /dev/sdb2 -b 4096
创建文件系统命令
mkfs
- -i #: 为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小
- -N #:指定分区中创建多少个inode
- -I 一个inode记录占用的磁盘空间大小, 128---4096
- -m #: 默认5%,为管理人员预留空间占总空间的百分比
- -L 设置卷标
例:在/dev/sdb2上建立ext4文件系统,同时块大小设置为4K,管理员空间修改为10%,卷标设置为/data/sdb2
mkfs.ext4 /dev/sdb2 -b 4096 -L /data/sdb2 -m 0.1
块设备属性信息查看
blkid
- -U UUID: 根据指定的UUID来查找对应的设备
- -L LABEL:根据指定的LABEL来查找对应的设备
相关脚本技巧:
1.对于交互式fdisk命令写脚本可以用标准输出重定向实现
echo -e "n\np\n\n\n+2G\nw\n" | fdisk /dev/sdc
或者用多行重定向
fdisk /dev/sdc <<EOF
2.脚本和配置文件引用设备一般使用UUID号确保设备唯一
开机失败故障处理:
1、如果更改了UUID但是没有保存,同时该条记录设置了开机检查,重启报错怎么办?
tune2fs -U `uuidgen` /dev/sdb2
blkid /dev/sdb2
解决方法:
这时候机子重启后是无法进入系统的,先根据系统提示输入root口令进入系统,然后修改vim /etc/fstab发现根目录是只读状态,无法修改。用命令mount -o rw,remount /重新挂载后根目录变成可读写状态。然后进入/etc/fstab里面修改UUID或者修改启动检查项为0都可。
建议修改/etc/fstab前进行备份
cp /etc/fstab{,.bak}
2、如果挂载点被删除,系统还是可以启动的,只需要重新建立挂载点,再挂载即可。
rm -rf /data/sdb2
reboot
mkdir /data/sdb2
mount -a
分区迁移
迁移/home到新分区上
随着使用时间的增加,在根目录的/home目录随着用户的使用越来越大,感觉需要增大应对,则需要对现有的/home分区进行迁移
1、第一步先做备份/home/(重要)
2、建立分区fdisk、gdisk
fdisk /dev/sdb
3、建立文件系统
mkfs.ext4 /dev/sdb1 -L /home
4、建立临时文件夹,挂载临时文件夹
mkdir /mnt/home
mount /dev/sdb1 /mnt/home
5、发布通知,并切换到单用户模式(单机模式会导致断网,只能在机房操作,无法远程操作)
init 1
runlevel
代表单用户模式single user切换到单用户模式确保没有用户使用/home
6、迁移数据
cp -av /home/* /mnt/home/
如果要包含隐藏文件可以用cp -av /home/. /mnt/home/
7、删除旧/home分区里的数据,防止空间浪费
rm -rf /home/*
ls /home
ls /mnt/home
8、在/etc/fstab里加入新分区数据
vim /etc/fstab
r!blkid /dev/sdb1
直接生成在末尾,然后修改一下格式保存
mount -a
9、取消挂载临时目录,删除临时目录
umount /mnt/home
rm -rf /mnt/home
10、切换到正常用户模式
init 5
注意:
数据必须备份
init1会导致断网,无法远程操作
根分区没法迁移
如何把/home移动回根目录下,就是取消迁移呢?
mkdir /mnt/home
mount /dev/sdb1 /mnt/home
init1
umount /home
mv /mnt/home/* /home/
vim /etc/fstab
删除挂载信息
umount /mnt/home
rm -rf /mnt/home
fdisk /dev/sdb 删除分区
永久挂载光盘分区
mkdir /mnt/cdrom
写入/etc/fstab
/dev/sr0 /mnt/crom iso9660 defaults 0 0
注意:
这里不能用UUID和卷标名,只能写设备名
永久挂载文件夹
就是文件夹挂载文件夹
mkdir /mnt/boot
vim /etc/fstab
/boot /mnt/boot none bind 0 0
mount -a
处理交换文件和分区
查询内存的使用情况使用情况
free -m
Centos6是buffer和cache分开
Centos7buffer和cache是合并显示
一般的比例是1:2左右
内存1 swap2
具体要根据内存来决定,如果内存大就没必要大
如果想改变swap分区的大小有两种方法:
第一种方法:
直接取消swap分区重新分,但是有可能swap正在使用,无法完成。
第二种方法:
另外建立一个新的swap分区
建议选择一个高速硬盘来建立swap分区,固态磁盘,如果是机械磁盘,尽量是空的机械磁盘,而且尽量往外道分(柱面数越小越外圈)。
1、创建SWAP分区
fdisk /dev/sdb
记得修改id用t
82 SWAP类型
2、创建SWAP文件系统
mkswap /dev/sdb1 -L swap_sdb1
3、挂载SWAP
vim /etc/fstab
r!blkid /dev/sdb1
修改数据格式保存(可以添加优先级信息pri=100)
用UUID
4、swapon -a生效
swapon -s
相当于运行
cat /proc/swaps
可以查询当前生效的所有swap分区,包括优先级信息,数字越大优先级越高优先级可以修改。
永久修改:
可以指定swap分区0到32767的优先级,值越大优先级越高
优化性能:分布存放,高性能磁盘存放
保存后先禁用
swapoff /dev/sdb1
然后
swapon -a
临时修改:
swapon -p
用文件来做SWAP分区
1、生成文件(创建分区)
dd if=/dev/zero of=/swapfile bs=1024M count=2
2、创建文件系统
mkswap /swapfile
3、挂载分区(文件速度较慢,不建议加优先级)
vim /etc/fstab
/swapfile swap swap defaults 0 0
swapon -a
去除所有添加的SWAP分区
swapoff /dev/sdb1
swapoff /swapfile
vim /etc/fstab
删除里面的swap分区信息
删除文件以及分区
rm -f /swapfile
fdisk /dev/sdb
挂载光盘
在图形界面下,光盘默认自动挂载
手工挂载:
mount /dev/cdrom /mnt/
弹出光盘
eject
弹入光盘
eject -t
小技巧:
弹出光驱定位故障电脑
制作ISO镜像文件
cp /dev/sr0 /data/centos7.iso
或者
dd if=/dev/sr0 of=/data/centos7.iso
把目录打包制作ISO镜像
mkisofs -r -o etc.iso /etc/
查看
file etc.iso
刻录光盘
wodim –v –eject centos.iso
合并两个盘源(centos6)方便做成yum源
先把两张光盘的内容合并到一个目录里
mkdir /centos6
cp /mnt/cdrom/* /centos6/ -r
挂载第二张盘
cp /mnt/cdrom/* /centos6/ -r
如果发现有相同文件则直接覆盖
mkisofs -r -o /data/Centos-6.9-x86_64-Everything.iso /centos6/
注意:这种光盘可以做yum源,但是不能做启动光盘,要做启动盘可以用
mkdvdiso官方工具制作完整盘,可以引导系统
https://wiki.centos.org/zh/TipsAndTricks/CDtoDVDMedia?highlight=%28mkdvdiso%29
用途:mkdvdiso.sh source /destination/DVD.iso
source 代表有2张光盘内容的目录
挂载USB介质
手动挂载
mkdir /mnt/usb
mount /dev/sdf /mnt/usb
查看USB设备是否识别
lsusb
注意使用u盘拷贝资料的时候很容易出现未同步问题(buffer)
所以要用sync同步一下
cp /etc/* /mnt/usb
sync;sync;sync
查看磁盘分区的使用情况
df 默认1K为单位
df -h 人类易读方式
df -I 以节点编号代替块
df -P 以Posix兼容的格式输出,长名字文件对齐
显示目录空间的使用情况
du /data/ 文件夹内统计
du -h 人类易读
du -s 汇总
du --max-depth 2 /etc/ 最大深度
工具dd
dd命令: convert and copy a file
用法:
dd if=/PATH/FROM/SRC of=/PATH/TO/DEST
bs=#: block size, 复制单元大小
count=#: 复制多少个bs
skip=blocks 从开头忽略blocks个ibs大小的块
seek=blocks 从开头忽略blocks个obs大小的块
count=n 只拷贝n个记录
建立文档f1 建立文档f2
123456 abcdefgh
dd if=f1 of=f2
cat f2
123456
dd if=f1 of=f2 bs=1 count=2 skip=3 seek=4
cat f2
abcd45
dd if=f1 of=f2 bs=1 count=2 skip=3 seek=4 conv=notrunc
cat f2
abcd45gh
转换大小写
dd if=f2 of=f3 conv=ucase
ABCD45GH
备份MBR:
dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
破坏MBR中的bootloader:
dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446
修复bootloader:
dd if=/tmp/mbr.bak of=/dev/sda bs=64 count=1 skip=446 seek=446
查看bootloader:
hexdump -C /dev/sda -n 512
有一个大与2K的二进制文件fileA。现在想从第64个字节位置开始读取,需要读取的大小是128Byts。又有fileB, 想把上面读取到的128Bytes写到第32个字节开始的位置,替换128Bytes,实现如下:
dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc
备份:
dd if=/dev/sdx of=/dev/sdy
将本地的/dev/sdx整盘备份到/dev/sdy
dd if=/dev/sdx of=/path/to/image
将/dev/sdx全盘数据备份到指定路径的image文件
dd if=/dev/sdx | gzip >/path/to/image.gz
备份/dev/sdx全盘数据,并利用gzip压缩,保存到指定路径
恢复:
dd if=/path/to/image of=/dev/sdx
将备份文件恢复到指定盘
gzip -dc /path/to/image.gz | dd of=/dev/sdx
将压缩的备份文件恢复到指定盘
修复硬盘
dd if=/dev/sda of=/dev/sda
当硬盘较长时间(比如1,2年)放置不使用后,磁盘上会产生消磁点。当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生,且这个过程是安全高效的
RAID各种模式优缺点总结
名称 读写性能 容错/校验位 磁盘利用率 最小磁盘数
raid0 读写性能提升 无 100% 1
raid1 读提升,写下降 有冗余 1 1/2 2
raid5 读写性能提升 容错1 校验1 n-1/n 3
raid6 读写性能提升 容错2 校验2 n-2/n 4
raid10 读写性能提升 每组镜像1个 1/2 4
raid01 读写性能提升 比不上raid10 1/2 4
raid50 读写性能提升 非常高 1/3 9