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参数就行了