Linux 系统管理 - 内存和磁盘管理
1、查看内存
free -m #MB
free -g #GB
top
2、磁盘分区查看
fdisk -l #/dev/sda /dev/sdb /dev/sdc
ls -l /dev/sd? #多少硬盘
ls -l /dev/sd?? #多少分区
df -h #推荐使用
df,查询文件系统磁盘空间占用情况
# df -h (-h 将空间大小友好化显示)
du,查询某个目录磁盘空间占用情况
# du -h --max-depth=1 (-h 将空间大小友好化显示 --max-depth=1 最大深度为1,即统计当前目录占用总空间,不需将子文件夹内容显示出来)
du /etc/passwd #实际占用空间大小
ls -lh /etc/passwd #预分配空间大小
#du和ls -lh的区别演示
dd if=afile bs=4M count=10 of=bfile #将afile的内容按照每次4M*10次,存放到bfile中
dd if=/dev/zero bs=4M count=10 of=afile #预先分配40M内容给afile
ls -lh afile
du -h afile
dd if=/dev/zero bs=4M count=10 seek=20 of=bfile #先跳过20*4M=80M,再写入10*4M
ls -lh bfile #120M
du -h bfile #40M
3、文件系统
ext4
xfs (CentOS7)
ext4文件系统结构
超级块:记录文件系统中包含多少个文件和文件总数
超级块副本
i节点(inode):记录每1个文件,大小,编号,文件权限
ls -l 除文件名以外,所有信息全部记录到i节点
文件名:存放在当前父目录的i节点上,例如pwd #/root, 则文件名存放到/root节点上
ls -i 第一个编号记载每个文件对应的i节点
数据块(datablock): 记录数据
1个文件可占用多个数据库,du实际计算的是这些数据块大小的总和
linux默认创建一个数据块大小为4K
4、inode演示
cp指令:实际上创建不同的i节点
mv指令:文件名虽然变化了,但是i节点信息并未变,只是修改了父目录的文件名
vim指令:更新内容,实际上inode信息发生了变更
echo 111 > a.txt inode信息不变更
创建硬链接文件(和原有的inode关联) ln <源文件> <目标文件>
创建符号链接文件(产生新的inode关联) ln -s <源文件> <目标文件>
链接数量为2 =》 权限后面1位,为链接数量
实际上inode和datanode在同一分区都没变化,但是跨越不同分区不能使用硬链接;如果跨越不同分区,需使用软链接ln -s ,俗称符号链接
软链接,默认第一位为l, 例如 lrwxrwxrwx
rm指令: 让文件名和inode节点断开,不管文件多大,删除时间都是一致的。
5、如何设置具体文件,某个用户可读可写
获取文件ACL权限 getfacl
设置文件ACL权限 setfacl -m u:<用户名>:rwx <文件名>
取消某个用户文件ACL权限:setfacl -x u:<用户名> <文件名>
6、磁盘分区和挂载
命令:fdisk、mkfs、parted 分区>2T、mount挂载命令
常见配置文件:/etc/fstab
fdisk -l
fdisk /dev/sdd #格式化硬盘,虚拟机先添加硬盘
m #help
n #add a new partition
p #primary主分区 1块硬盘1个主分区
分区号(1-4,默认1):1 #输入1
Last 扇区 : +50G
p #查看当前分区
q #退出,不保存
w #保存
d #不符合,直接删掉
fdisk -l
mkfs.
mkfs.ext4 /dev/sdc1 #将硬盘映射为盘符,创建分区
mkdir /mnt/sdc1
mount -t ext4 /dev/sdc1 /mnt/sdc1 #将盘符挂载到文件系统
mount /dev/sdc1 /mnt/sdc1
mount 查看
vim /etc/fstab 开启自动挂载
/dev/sdc1 /mnt/sdc1 ext4 defaults 0 0
defaults 代表默认权限
7、分区和挂载磁盘配额 限制用户和用户组创建文件大小或磁盘大小
fdisk /dev/sdb #格式化硬盘
m #help
n #add a new partition
p #primary主分区 1块硬盘1个主分区
分区号(1-4,默认1):1 #输入1
Last 扇区 : +50G
p #查看当前分区
q #退出,不保存
w #保存
d #不符合,直接删掉
mkfs.xfs -f /dev/sdb1 #将硬盘映射为盘符,创建分区 -f强制操作
mkdir /mnt/sdc1
mount -o uquota,gquota /dev/sdb1 /mnt/sdb1 #用户配额,磁盘配额
mount 查看
xfs_quota -x -c 'report -ugibh' /mnt/sdb1 #查看限制
id user1
xfs_quota -x -c 'limit -u isoft=5 ihard=10 user1' /mnt/disk1
7、交换分区swap的查看与创建
增加交换分区大小 mkswap和swapon
使用文件作为交换分区 dd if=/dev/zero bs=4M count=1024 of=/swapfile
7.1 使用硬盘扩充swap分区
umount /dev/sdc1
mkswap /dev/sdc1
swapon /dev/sdc1
free -m
swapoff /dev/sdd1
7.2 使用文件扩充swap分区
dd if=/dev/zero bs=4M count=1024 of=/swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
free -m
7.3 永久生效
vim /etc/fstab
#/dev/sdc1 /mnt/sdc1 ext4 defaults 0 0
/dev/sdd1 swap swap defaults 0 0
#swap虚拟文件 ,第一个0:代表要不要备份,默认为0 第二个0: 代表是否要自检
/swapfile swap swap defaults 0 0
8、磁盘RAID与软件RAID技术
RAID 0 striping 条带方式,至少有两块硬盘(分布写50%),提高单盘吞吐率
RAID 1 mirroring镜像方式,提高可靠性,备份
RAID 5 有奇偶校验 至少3块硬盘,第三块硬盘写前两块硬盘的奇偶校验
缺点:如果两块磁盘损坏,数据依旧会丢失
RAID 10是RAID1和RAID0结合体,需要4块硬盘
两块硬盘做RAID1,再拿两块硬盘做RAID0
软件RAID技术
mdadm -C /dev/md0 -a yes -l1 -n2 /dev/sdb1 /dev/sdc1
mdadm -C /dev/md0 -a yes -l1 -n2 /dev/sd[b,c]1
-a: 统一创建设备
-l: RAID1
-n2:至少要两块硬盘
#出现这个错误mdadm: cannot open /dev/sdb1: Device or resource busy
umount /dev/sdb1
umount /dev/sdc1
mdadm -D /dev/md0
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
#破坏1个硬盘 dd if=/dev/zero of=/dev/sdc1 bs=4M count=1
echo DEVICE /dev/sd[b,c]1
echo DEVICE /dev/sd[b,c]1 >> /etc/mdadm.conf
mdadm -Evs >> /etc/mdadm.conf
mkfs.xfs /dev/md0
9、逻辑卷管理
pvcreate /dev/sd[b,c]1 #创建逻辑卷
mdadm --stop /dev/md0 #停止RAID
umount /dev/sdb1
umount /dev/sdc1
dd if=/dev/zero of=/dev/sdb1 bs=4M count=1 #破坏超级块
dd if=/dev/zero of=/dev/sdc1 bs=4M count=1 #破坏超级块
pvs #查看物理卷 lvm2 linux逻辑卷管理器
#-------------------------------------------
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- 19.51g 4.00m
/dev/sdb1 lvm2 --- 20.00g 20.00g
/dev/sdc1 lvm2 --- 20.00g 20.00g
#-------------------------------------------
vgcreate vg1 /dev/sdb1 /dev/sdc1 #创建VG逻辑卷组
pvs
#-------------------------------------------
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- 19.51g 4.00m
/dev/sdb1 vg1 lvm2 a-- 20.00g 20.00g
/dev/sdc1 vg1 lvm2 a-- 20.00g 20.00g
#-------------------------------------------
vgs
#--------------------------------------------
VG #PV #LV #SN Attr VSize VFree
centos 1 3 0 wz--n- 19.51g 4.00m
vg1 2 0 0 wz--n- 39.99g 39.99g
#--------------------------------------------
lvcreate -L 100M -n lv1 vg1 创建逻辑卷 -n 逻辑卷名称 vg1逻辑卷组
lvs
mkdir /mnt/test
mkfs.xfs /dev/vg1/lv1
mount /dev/vg1/lv1 /mnt/test
#扩容现有逻辑分区
vgextend centos /dev/sdd1
lvextend -L +50G /dev/centos/root
df -h #分区并没有扩大
xfs_growfs /dev/centos/root #告诉文件系统,逻辑卷已经扩大
10、综合状态查询
sar、iftop、vmstat
sar -u 1 10 : 1s采样1次,采数10次
sar -r 1 10 : 采样内存
sar -b 1 10: 采样IO磁盘
sar -d 1 10: 对应每快磁盘读写
sar -q 1 10 :进程使用
iftop -p : 观察网络,默认看eth0
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix