Disk cmd
💰inode
💥存储特定文件的元数据的一种数据结构.小文件很可能用完了所有的inode
✏查看inode使用情况
df -i
⚠磁盘耗尽空间有两种情况 1⃣没有可用空间 2⃣没有可用inode
1⃣df
💥查看文件系统的磁盘空间占用的情况,包括inode
2⃣fdisk parted
💥磁盘分区(fdisk只能小于2T的磁盘分区,parted都可以)
1⃣fdisk
💰基本使用
💥fdisk -l列出整个系统内能搜寻到的装置的分区
💥fdisk /dev/sdb
⚠不要输入w,这是让动作生效的操作‼应该输入q(quit)
💰参数
1⃣m
💥查看帮助
2⃣w
💥动作生效(保存)
3⃣q
💥quit
4⃣p
💥查看目前分区好的情况
5⃣n
💥进行分区操作
⚠1⃣如果扩展分区分好了,后面的就会出现"逻辑分区+主分区" 2⃣磁盘分区以柱面为单位,即使我们输入+100M,假如用了14个柱面,那么下一个分区就只能从第15个分区开始 3⃣总共的柱面数量可以通过fdisk查看
6⃣t
💥改变分区格式
💲比如LVM必须是8e(按L查看),Linux类型不行,所以要改成Linux LVM格式(按t后选择分区编号就行了,比如sdb5就是5)
7⃣d
💥删除分区
💰参数
1⃣-l
💥list partition table(s)
✏查看/dev/sdb的分区表
fdisk -l /dev/sdb
2⃣parted
💥大于2T也能分区的命令
💰使用
⚠直接分区就可以了
✏非交互式分区
parted /dev/sdb mklabel gpt
parted /dev/sdb mkpart primary 0 500 # 单位为M
parted /dev/sdb mkpart primary 500 501
mkfs -t ext4 /dev/sdb1 /dev/sdb2
mount /dev/sdb2 /tmp
✏交互式分区
parted /dev/sdb
💰参数
1⃣help
2⃣mklabel
⚠mklabel gpt(parted都要先弄成gpt)
3⃣mkpart
💰✏使用
mkpart primary 0 500
mkpart logical 501 1000
3⃣mkfs
💥将磁盘分区格式化化成文件系统(所以df才会说是文件系统在磁盘内的占用情况)
✏将/dev/sdb1格式化成为ext4文件系统
mkfs.ext4 /dev/sdb1
tune2fs -c -1 /dev/sdb1 # 好像是不想让文件检查,调节文件系统参数
⭐1⃣文件系统有多种 2⃣ext2,ext3,ext4,vfat等都是文件系统 3⃣格式化成什么文件系统,就用对应的命令(+磁盘分区)
⚠✏格式化好后要挂载才能用
mount /dev/sdb1 /mnt
✏虚拟机上利用已经分区好的或者没有分区的(如/dev/sdb)来做成ext4文件系统,并且挂载到/mnt里并随便创建一个文件
# 分区操作 (可能需要重启生效)
fdisk -l
mkfs.ext4 /dev/sdb
mount /dev/sdb /mnt
touch /mnt/dd
ll /mnt
umount /mnt
df -h
mount -t ext4 /dev/sdb /mnt #mount的-t表示以什么文件格式挂载
df -h
💥先磁盘分区,再格式化,之后挂载,创建文件,取消挂载
⚠Linux系统下没有分区的磁盘也可以格式化,比如说直接格式化/dev/sdb
❓/dev/sdb算没有分区过的磁盘吗❓ 分区过的磁盘是不是都有编号❓ 比如主分区一定是1之类的
⭐磁盘分区格式化后,要想进行读写操作必须挂载(Linux一般挂载到/mnt下面)
💰必须挂载后,格式化了的磁盘分区才能被使用,我们才能说这个文件系统占用了多少空间,所以df才能查看到该分区
💥挂载就是给这个文件系统一个入口,只有有了入口,才能够对文件系统进行操作
4⃣dd
💥Convert and copy a file.制作一个虚拟的文件系统
💰使用
✏获得0磁头0柱面1扇区的内容
dd if=/dev/sda of=mbr.bin bs=512 count=1
⚠mbr.bin是在当前目录下生成的文件,".bin"这是后缀名,说明这是二进制文件,可以用file mbr.bin
查看
💰参数
1⃣if
💥Read from FILE instead of stdin
2⃣of
💥Write to FILE instead of stdout
3⃣count=N
💥Cop only N input blocks
4⃣bs=BYTES
💥Read and write up to BYTES bytes at a time块的大小
5⃣od
💥Dump files in octal and other formats
💰✏使用
od -xa mbr.bin
💰参数
1⃣-x
💥select hexadecimal 2-byte units
6⃣partprobe
💥Inform the OS of partition table changes
⚠用fdisk分区后,操作系统还不知道分区了,所以要partprobe
💰✏使用
partprobe /dev/sdb # 如果分区的是sdb磁盘的话,最好就直接跟上参数
⚠如果还是不行,就重启
7⃣du
💥查看文件或者目录的大小
💰✏使用
du -sh /etc
💰参数
1⃣-s
💥查看大小
2⃣-h
💥人类可读的.与ls -h
的-h
相同
8⃣mount
💰使用
💥1⃣mount 源 目的 2⃣mount 远程ip地址:远程目录 本地目录
💰参数
1⃣-t
💥挂载类型,如nfs
2⃣-o
💰参数
1⃣atime
💥每次数据访问时,同步更新每次访问的inode时间.(默认开启)
⚠高并发的话性能差,建议不要用
2⃣noatime✅
3⃣async
💥异步.数据不安全,虽然效率高
💡NFS的服务器配置/etc/exports
4⃣defaults
💥包括rw,suid,dev,exec,auto,and async
💡/etc/fstab
5⃣nosuid,noexec,nodev
💥(安全的参数)1⃣nosuid就是不能设置suid 2⃣noexec表示如果NFS文件内的文件有x权限,客户端仍然不能直接执行它(可以用解释器,如sh 1.sh
,或者拷贝都本地执行,但不能直接./1.sh
)
6⃣intr
💥如果hard模式下.就允许中断
7⃣soft和hard⭐
💥hard的话一直呼叫,soft只重复呼叫但不一直呼叫
⭐要么hard,intr
,要么soft
✏soft挂载
sudo mount -t nfs -o soft 172.16.55.137:/data /mnt
✏查看客户端挂载参数
cat /proc /mounts
8⃣rsize和wsize⭐
💥rsize/wsize为读取/写入的块的大小,如果size越大,自然效率就变大,默认65535
💰测试
time dd if=/dev/zero of=/mnt/testfile bs=9k count=20000 # time记录时间
9⃣remount
💰文件系统只读故障
1⃣rsync的bug
2⃣同时读取文件导致bug
💥解决方法mount -o rw,remount /
🌪/etc/fstab的最后一个写了1
3⃣-a
💥Mount all file system mentioned in the fstab(可以当做检查fstab语法的方法)
✏检查fstab是否写对
mount -a
❓挂载nfs却一直没有反应
💥因为hard模式(NFS的服务器和客户端耦合度过高)下,RPC一直发送呼叫,即使NFS服务器离线了,也一直再呼叫.如果使用soft的话,就会重复呼叫但不会一直呼叫.
💡df -h没反应也是这个情况
💰优化
💥1⃣性能:rsize,wsize,其次soft,hard,noatime,nodiratime 2⃣安全:nosuid,noexec,nodev(有这些效率会有一点降低)
✏推荐
sudo mount -t nfs -o noexec,nosuid,nodev,noatime,nodiratime,rw,bg,soft,rsize=32768,wsize=32768 172.16.55.137:/data /mnt
💰noatine和nodiratime是小文件高并发的优化.因为文件大的话,改不改时间戳影响不大
⚠简单的话就是4个
9⃣umount
❓如果提示device is busy
,怎么umount
umount -lf /mnt
💥NFS服务器宕机或者我在当前挂载目录(如/mnt)下
9⃣虚拟内存
💥通过/swap来增加虚拟内存
💰操作
1⃣查看虚拟内存情况
sudo swapon -s
💰命令
1⃣swapon
💰参数
1⃣-s
💥查看虚拟内存情况
✏设置某个目录为虚拟内存
sudo swapon /swapfile
2⃣mkswap
💥格式化成为虚拟内存
2⃣增加虚拟内存
sudo dd if=/dev/zero of=/swapfile bs=1M count=8192
sudo mkswap /swapfile
sudo swapon /swapfile
sudo swapon -s # 查看现在的swap情况
3⃣删除
$ swapoff /swapfile #卸载swap文件
$ 并修改/etc/fstab文件 #从配置总删除
$ rm -rf /swapfile #删除文件
✏挂载Windows的D盘
sudo mount -t ntfs /dev/sdb /mnt/D -o iocharset=utf8,umask=0
⚠没有特殊需求,使用格式化默认的inode和block参数就行了