磁盘管理二

硬盘接口类型


sata
目前常见的接口方面又分为SATA、SAS、MSATA、M.2。

sas

sas接口为企业级专业硬盘使用接口,满足高性能、高可靠性。

以前还有SCSI接口,已经被sas接口取代了。

关于硬盘的历史,主要是如下升级

个人主机

IDE(Integrated Drive Electronics)传统级硬盘接口、
被SATA取代
企业服务器

SCSI(Small Computer System Interface),小型计算机系统专用接口
被SAS(Serial Attached SCSI)取代

机械硬盘、固态硬盘特点

机械硬盘、怕摔、怕震动
固态硬盘、怕突然断电

硬盘命名规则



还有就是惠普服务器的硬盘

/dev/cciss/c0d0
/dev/cciss/c0d0p1           c0第一个控制器, d0第一块磁盘, p1分区1
/dev/cciss/c0d0p2           c0第一个控制器, d0第一块磁盘, p2分区2
ls  /dev/看看磁盘文件

ls /dev/sd*
/dev/sda  /dev/sda1  /dev/sda2
/dev/sdb
/dev/sdc

磁盘分区

MBR分区特点

不支持2T以上硬盘
最多支持4个主分区
fdisk命令只能创建MBR分区

磁盘分区步骤

1.执行fdisk /dev/sdb命令,给硬盘创建分区/dev/sdb1、/dev/sdb2、

2.刷新分区表

3.格式化分区文件系统、mkfs.ext4 /dev/sdb1

4.挂载使用该分区,mount

5.开机自动挂载、autofs自动挂载

磁盘分区结构(重要)
主分区
一个硬盘的主分区也就是包含操作系统启动所必需的文件和数据的硬盘分区,要在硬盘上安装操作系统,则该硬盘必须得有一个主分区。
主分区,也称为主磁盘分区,和扩展分区、逻辑分区一样,是一种分区类型。
主分区中不能再划分其他类型的分区

扩展分区/逻辑分区

扩展分区也就是除主分区外的分区,但它不能直接使用,必须再将它划分为若干个逻辑分区才行。逻辑分区也就是我们平常在操作系统中所看到的D、E、F等盘。

主分区,primary partition
扩展分区,extended
逻辑分区

系统默认分区1~4留给了主分区和扩展分区

主分区1 * (星号代表是引导分区,引导分区装在这里)
主分区2
主分区3
主分区4(extended)
逻辑分区n

分区须知(记忆)

最多只能分4个主分区,主分区编号1-4
逻辑分区大小总和不能超过扩展分区大小,逻辑分区分区编号从5开始
如果删除扩展分区,下面的逻辑卷分区也被删除
扩展分区的分区编号(1-4)

关于fdisk命令

fdisk命令

使用fdisk分区
添加新硬盘
vmware添加硬盘



重启linux虚拟机,必须!
查看新添加的硬盘(查看磁盘信息)
lsblk命令

[root@lamp-241 ~]# ls -l /dev/sd*
brw-rw---- 1 root disk 8,  0 Mar  2 01:16 /dev/sda
brw-rw---- 1 root disk 8,  1 Mar  2 01:16 /dev/sda1
brw-rw---- 1 root disk 8,  2 Mar  2 01:16 /dev/sda2
brw-rw---- 1 root disk 8, 16 Mar  2 01:16 /dev/sdb

df命令

[root@lamp-241 ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   17G  6.1G   11G  36% /
devtmpfs                 899M     0  899M   0% /dev
tmpfs                    911M     0  911M   0% /dev/shm
tmpfs                    911M  9.6M  902M   2% /run
tmpfs                    911M     0  911M   0% /sys/fs/cgroup
/dev/sda1               1014M  142M  873M  14% /boot
tmpfs                    183M     0  183M   0% /run/user/0


显示信息文件系统列下面带tmpfs字样的是虚拟内存文件系统(此处不做展开)。

文件系统/dev/mapper/centos-root的挂载点是/(根目录),即通常所说的根分区(或根文件系统);
并且/dev/mapper是linux内核2.6中提供的一个从逻辑设备到物理设备的映射机制,简单说这就是如果你用了lvm,就会看到根目录是这个文件系统,因为它不是一个单纯的物理设备,而是一个虚拟机的逻辑卷组。


/dev/sda1(boot分区)中保存了内核映像和一些启动时需要的辅助文件;

还有一个特殊的分区,swap分区,swap分区是一块特殊的硬盘空间,当实际内存不够用的时候,操作系统会从内存中取出一部分暂时不用的数据,放在交换内存中,从而使当前的程序腾出更多的内存量。
但是由于其性能很差,生产环境是直接禁用的。

fdisk命令参数解释

操作sdb硬盘

[root@lamp-241 ~]# fdisk  /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xf0f33bf9.

Command(m for help): m                                  输出帮助信息
Commandaction
   a  toggle a bootable flag                          设置启动分区
   b  edit bsd disklabel                              编辑分区标签
   c  toggle the dos compatibility flag
   d  delete a partition                                删除一个分区
   l  list known partition types                      列出分区类型
   m  print this menu                                 帮助
   n  add a new partition                             建立一个新的分区
   o  create a new empty DOS partition table      创建一个新的空白DOS分区表
   p  print the partition table                   打印分区表
   q  quit without saving changes                   退出不保存设置
   s   createa new empty Sun disklabel                创建一个新的空的SUN标示
   t   changea partition's system id              改变分区的类型
   u   changedisplay/entry units                    改变显示的单位
   v   verifythe partition table                  检查验证分区表
   w  write table to disk and exit               保存分区表

任务:操作sdb硬盘(mbr分区)

将sdb硬盘分区
1个主分区
1个扩展分区
2个逻辑分区




最后查看分区情况

[root@lamp-241 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk
├─sdb1            8:17   0  256M  0 part
├─sdb2            8:18   0    1K  0 part
├─sdb5            8:21   0   10G  0 part
└─sdb6            8:22   0  9.8G  0 part
sr0              11:0    1  4.2G  0 rom

partx刷新分区

如果你创建完了分区,没有正确读取到分区信息,可能是linux内核还未读取到分区信息,可以主动告诉linux内核,新的分区情况。

#让内核重读分区表
# partx  /dev/sdb

查看是mbr还是gpt?

fdisk命令看

parted命令看

操作sdb硬盘(gpt分区)

超过2TB的大硬盘分区,就必须用GPT分区了。
小于2TB的磁盘都可以用fdisk分区,但是大于2TB的磁盘,可以用parted分区但是不好用,直接用gdisk分区,分区之前先从mbr转化为gpt

如何修改分区表的类型

parted命令

从mbr改为gpt?-------(parted) mktable gpt


从gpt改为mbr?------(parted) mktable msdos

parted命令修改磁盘为mbr类型。 gpt类型同理

[root@lamp-241 ~]# parted /dev/sdb
GNU Parted 3.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.

修改磁盘分区表类型为mbr类型

(parted) mktable msdos
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? yes
(parted)
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start  End  Size  Type  File system  Flags

(parted)

修改gpt类型

ms-doc  这是mbr类型的名字
gpt 这是GUID分区表的类型名字


parted /dev/sdb 
修改当前硬盘的分区表类型,改为gpt,注意如下操作会摧毁原有的数据
(parted) mklabel gpt  
使用print指令,查看分区表信息,以及分区表类型
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start  End  Size  File system  Name  Flags

(parted)   

gdisk命令分区gpt类型

安装gdisk命令
[root@lamp-241 ~]# yum install gdisk -y


-l 列出硬盘的分区表信息

[root@lamp-241 ~]# gdisk -l /dev/sdb
GPT fdisk (gdisk) version 0.8.10

Partition table scan:
  MBR: MBR only
  BSD: not present
  APM: not present
  GPT: not present


***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory.
***************************************************************

Disk /dev/sdb: 41943040 sectors, 20.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 951AECF9-82E1-4DBA-9C2A-EECA931CC6E8
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 41942973 sectors (20.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
[root@lamp-241 ~]#
[root@lamp-241 ~]#

gdisk对磁盘分区为gpt



查看gdisk语法帮助
[root@lamp-241 ~]# gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.10

Partition table scan:
  MBR: MBR only
  BSD: not present
  APM: not present
  GPT: not present


***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by
typing 'q' if you don't want to convert your MBR partitions
to GPT format!
***************************************************************


Command (? for help):
查看帮助信息


Command (? forhelp): ?
b    backupGPTdatatoafile
c    changeapartition'sname
d    deleteapartition                    #删除分区
i    showdetailedinformationonapartition
l    listknownpartitiontypes            #列出分区类型
n    addanewpartition                    #添加新分区
o    createanewemptyGUIDpartitiontable (GPT)
p    printthepartitiontable                #打印分区列表
q    quitwithoutsavingchanges            #不保存退出
r    recoveryandtransformationoptions (expertsonly)
s    sortpartitions
t    changeapartition'stypecode        #修改分区类型
v    verifydisk
w    writetabletodiskandexit            #保存退出
x    extrafunctionality (expertsonly)
?    printthismenu 


添加新分区

Command (? for help): p
Disk /dev/sdb: 41943040 sectors, 20.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): D243B068-B5C3-4A77-8A70-86B69C0A9ED5
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 41942973 sectors (20.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name

添加分区指令
Command (? for help): n
Partition number (1-128, default 1): 1
First sector (34-41943006, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}: +2G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

Command (? for help): p
Disk /dev/sdb: 41943040 sectors, 20.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): D243B068-B5C3-4A77-8A70-86B69C0A9ED5
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 37748669 sectors (18.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         4196351   2.0 GiB     8300  Linux filesystem

Command (? for help): n
Partition number (2-128, default 2):
First sector (34-41943006, default = 4196352) or {+-}size{KMGTP}:
Last sector (4196352-41943006, default = 41943006) or {+-}size{KMGTP}: +10G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

Command (? for help): p
Disk /dev/sdb: 41943040 sectors, 20.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): D243B068-B5C3-4A77-8A70-86B69C0A9ED5
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 16777149 sectors (8.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         4196351   2.0 GiB     8300  Linux filesystem
   2         4196352        25167871   10.0 GiB    8300  Linux filesystem

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.

验收分区

[root@lamp-241 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk
├─sdb1            8:17   0    2G  0 part
└─sdb2            8:18   0   10G  0 part
sr0              11:0    1  4.2G  0 rom

重新改为mbr分区类型

重置为mbr类型,会删除所有分区
[root@lamp-241 ~]# parted /dev/sdb
GNU Parted 3.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mktable msdos
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? yes
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start  End  Size  Type  File system  Flags


再次查看分区表类型

[root@lamp-241 ~]# fdisk -l /dev/sdb

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000ad5a3

   Device Boot      Start         End      Blocks   Id  System

格式化文件系统

分区完毕之后,就得进行格式化文件系统,磁盘才可以使用,这就好比,你买了个房,打完隔断之后,装修一下才能住!

磁盘格式化是因为不同的操作系统设置的文件属性、权限各不相同,还得将分区格式化后,成为操作系统能够识别、兼容的文件系统(filesystem)。

分区搞明白之后,下一步就是要进行分区格式化文件系统

1.分区等于是对磁盘的扇区做分配处理,每一个分区,占用哪一段连续的分区。

2.分区完了之后,你是一个普通人类,如何去读写扇区里的数据?答案就是文件系统

图解文件系统的使用

有哪些文件系统


文件系统的区别
总之不同的文件系统,区别在于

兼容性,不同系统平台,不一定识别、或者无法读写操作
容量大小、支持硬盘最大容量有限制

目前最主流的windows、linux、macos使用的文件系统,以及对应的文件系统特点

- Windows	

  NTFS:Windows NT 内核的系列 操作系统 支持的、一个特别为网络和磁盘配额、文件加密等管理安全特性设计的 磁盘格式 ,提供长文件名、 数据保护 和恢复,能通过目录和文件许可实现安全性,并支持跨越分区。	最大可以存储16EB数据
  FAT32 最大支持单个文件大小不超过4G

- Linux

  ext4:是 ext 文件系统的最新版。提供了很多新的特性,包括纳秒级时间戳、创建和使用巨型文件 (16TB)、最大1EB的文件系统,以及速度的提升 ,Ubuntu默认文件系统

  xfs:支持最大8EB的文件系统,CentOS7系统默认文件系统

- macos

  apfs:APFS的应用环境仅限于macOS、iOS、iPadOS、tvOS、watchOS这些只有苹果才有的操作系统中。它是针对闪存等固态存储装置而诞生的文件系统

mkfs格式化文件系统

mkfs命令
mkfs把分区格式化为某种文件系统
使用mkfs命令可以进行分区,文件系统格式化

1.把机器上的/dev/sdc硬盘,重新分区一个单个分区,是20G
fdisk /dev/sdc

2.给这个分区,分别格式化xfs文件系统
[yuchao-linux01 root ~]$mkfs.xfs /dev/sdc1
meta-data=/dev/sdc1              isize=512    agcount=4, agsize=1310656 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5242624, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0


3.挂载一个目录,到这个分区,即可使用该分区,存储数据了
[yuchao-linux01 root ~]$mount /dev/sdc1 /opt/my_sdc/
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$mount -l |grep sdc1
/dev/sdc1 on /opt/my_sdc type xfs (rw,relatime,attr2,inode64,noquota)
[yuchao-linux01 root ~]$


4.查看挂载情况
mount -l


5.设置永久挂载    
上述的mount挂载命令是临时生效,需要开机就让系统自动挂载,方可实现,永久生效
编辑 /etc/fstab文件即可
[yuchao-linux01 root /opt]$tail -1 /etc/fstab      注意:如果取消挂载,一定要把fstab文件自己添加的信息删掉,不然重启会报错
/dev/sdc1 /opt/my_sdc xfs defaults 0 0 


6.重启机器,查看是否开机就能自动挂载,读取到/dev/sdc1磁盘的数据
再次使用mount -l |grep sdc 查看磁盘的挂载情况

以及去访问挂载点,是否能读到分区的数据即可

[yuchao-linux01 root ~]$mount -l |grep sdc
/dev/sdc1 on /opt/my_sdc type xfs (rw,relatime,attr2,inode64,noquota)
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$ls /opt/my_sdc/

知识点提示

工作里,新硬盘可以不分区,直接格式化整块硬盘,直接使用。
[yuchao-linux01 root ~]$mkfs.xfs -f  /dev/sdc

如何查看磁盘的唯一ID号(uuid)

blkid命令

blkid 命令:可以查看块设备(包括交换分区)的文件系统类型、LABEL、UUID、挂载目录等信息

[yuchao-linux01 root ~]$blkid
/dev/mapper/centos-root: UUID="0a7fed5a-edce-4354-aa17-2aa6781e1b85" TYPE="xfs"
/dev/sda2: UUID="S2y7zo-9SQ9-prrr-ZOtT-NdW8-vVLo-jFwngl" TYPE="LVM2_member"
/dev/sda1: UUID="c07b71e0-a0a4-41e5-9c12-24646b84c73f" TYPE="xfs"
/dev/sr0: UUID="2018-05-03-20-55-23-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/mapper/centos-swap: UUID="706d68e5-0a75-46d2-ab62-cede96863212" TYPE="swap"
/dev/sdc1: UUID="53d27e49-27d9-425f-8854-c8b24cac6047" TYPE="ext4"
/dev/sdb: UUID="755dac52-71fc-4cea-a76d-f904c55790e0" TYPE="ext4"

mount挂载实践

1.一个目录、同一时间只能被一个设备挂载
2.一个设备可以挂载多个目录

3.如果一个目录被多个设备挂载,只能看到最后一个挂载的设备数据,其他的设备数据会被隐藏。

4.工作里建议用新的文件夹,作为挂载点。

mount -l 显示挂载情况
mount -a 读取/etc/fstab所有的挂载设置
mount -o 练习,读写,只读,允许二进制执行的三个参数

[yuchao-linux01 root ~]$mount -o ro /dev/sdc /test1
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$mount -l |grep test1
/dev/sdc on /test1 type ext4 (ro,relatime,data=ordered)
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$cat /test1/冲冲冲 
123
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$echo "456" >> /test1/冲冲冲 
-bash: /test1/冲冲冲: Read-only file system

读写
mount 挂载默认参数,即是rw读写

# 不允许执行程序
noexec 
[yuchao-linux01 root ~]$mount -o noexec,rw /dev/sdc /test1
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$mount -l |grep text1
[yuchao-linux01 root ~]$mount -l |grep test1
/dev/sdc on /test1 type ext4 (rw,noexec,relatime,data=ordered)
[yuchao-linux01 root ~]$


[yuchao-linux01 root /test1]$./hello.sh
-bash: ./hello.sh: Permission denied
[yuchao-linux01 root /test1]$

关于umount的坑

你如果在挂载目录里呆着,是无法umount的

umount用于取消已经挂载的设备
-f 强制卸载

正常卸载

当该设备无人使用时
无进程在使用时
可以正常卸载

[yuchao-linux01 root ~]$umount /my_sdb7/
[yuchao-linux01 root ~]$df -h|grep my_sdb7
[yuchao-linux01 root ~]$

该目录中有人在访问

重新挂载
[yuchao-linux01 root ~]$mount -a
[yuchao-linux01 root ~]$
再开一个终端,模拟有人在访问该目录

此时无法正常卸载
[yuchao-linux01 root ~]$umount /my_sdb7/
umount: /my_sdb7: target is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
[yuchao-linux01 root ~]$


解决办法
1.让那人离开目录
2.干掉操作该目录的进程

使用lsof命令
[yuchao-linux01 root ~]$lsof /my_sdb7/
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash    47861 root  cwd    DIR   8,23        6   64 /my_sdb7
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$ps -ef|grep 47861
root      47861  47859  0 19:31 pts/4    00:00:00 -bash
root      47906  47758  0 19:33 pts/3    00:00:00 grep --color=auto 47861

强制让他滚蛋。。。

[yuchao-linux01 root ~]$ps -ef|grep 47861
root      47861  47859  0 19:31 pts/4    00:00:00 -bash
root      47908  47758  0 19:33 pts/3    00:00:00 grep --color=auto 47861
[yuchao-linux01 root ~]$kill -9 47861
[yuchao-linux01 root ~]$

此时可以正常卸载
[yuchao-linux01 root ~]$df -h |grep my_sdb7
/dev/sdb7                    2.0G   33M  2.0G   2% /my_sdb7
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$umount /my_sdb7/
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$df -h |grep my_sdb7
[yuchao-linux01 root ~]$

开机自动挂载fstab

刚才学的是手动挂载,mount,但是这个操作是临时生效,重启后丢失
如果你重启了服务器,又忘记了去挂载,必然会导致使用该挂载点的程序,全部故障


因此如果你要一直访问这个挂载点,访问该设备,你得设置开机自动挂载

这个功能是/etc/fstab文件



自动挂载磁盘分区

[yuchao-linux01 root ~]$blkid /dev/sdb7
/dev/sdb7: UUID="d83e18c9-8b3e-4f38-b25f-6e9818e00b55" TYPE="xfs"

[yuchao-linux01 root ~]$vim /etc/fstab

写入如下挂载信息

让系统重新挂载所有设备

检查当前的挂载情况
[yuchao-linux01 root ~]$df -h
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/centos-root       17G  8.9G  8.1G  53% /
devtmpfs                     3.8G     0  3.8G   0% /dev
tmpfs                        3.9G     0  3.9G   0% /dev/shm
tmpfs                        3.9G   28M  3.8G   1% /run
tmpfs                        3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/sda1                   1014M  142M  873M  14% /boot
/dev/mapper/vg--qiaofu-lv01   50G  575M   50G   2% /qiaofu-data
tmpfs                        781M     0  781M   0% /run/user/0

挂载所有设备
[yuchao-linux01 root ~]$mount -a
[yuchao-linux01 root ~]$df -h
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/centos-root       17G  8.9G  8.1G  53% /
devtmpfs                     3.8G     0  3.8G   0% /dev
tmpfs                        3.9G     0  3.9G   0% /dev/shm
tmpfs                        3.9G   28M  3.8G   1% /run
tmpfs                        3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/sda1                   1014M  142M  873M  14% /boot
/dev/mapper/vg--qiaofu-lv01   50G  575M   50G   2% /qiaofu-data
tmpfs                        781M     0  781M   0% /run/user/0
/dev/sdb7                    2.0G   33M  2.0G   2% /my_sdb7
[yuchao-linux01 root ~]$

linux特殊设备文件

/dev/null
/dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”。比较常见的用法是把不需要的输出重定向到这个文件。
ping yuchaoit.cn > /dev/null &


/dev/zero
零”设备,可以无限的提供空字符(0x00,ASCII代码NUL)。常用来生成一个特定大小的文件。
dd if=/dev/zero of=test.log bs=1M count=50


/dev/random和/dev/urandom
dev/random和/dev/urandom是Linux系统中提供的随机伪设备,这两个设备的任务,是提供永不为空的随机字节数据流。很多解密程序与安全应用程序(如SSH Keys,SSL Keys等)需要它们提供的随机数据流。

危险玩法,比如实现类似于shred粉碎文件的作用
[root@yuchao-tx-server ~]# dd bs=1M count=30  if=/dev/urandom of=./t1

也可以销毁硬盘分区数据
dd if=/dev/urandom of=/dev/sda5

光盘挂载

[yuchao-linux-242 root ~]#mount /dev/sr0 /mnt
mount: /dev/sr0 is write-protected, mounting read-only

[yuchao-linux-242 root ~]#
[yuchao-linux-242 root ~]#df -h |grep mnt
/dev/sr0                 4.2G  4.2G     0 100% /mnt
[yuchao-linux-242 root ~]#

[yuchao-linux-242 root ~]#ll /mnt
total 678
-rw-rw-r-- 1 root root     14 May  2  2018 CentOS_BuildTag
drwxr-xr-x 3 root root   2048 May  4  2018 EFI
-rw-rw-r-- 1 root root    227 Aug 30  2017 EULA
-rw-rw-r-- 1 root root  18009 Dec 10  2015 GPL
drwxr-xr-x 3 root root   2048 May  4  2018 images
drwxr-xr-x 2 root root   2048 May  4  2018 isolinux
drwxr-xr-x 2 root root   2048 May  4  2018 LiveOS
drwxrwxr-x 2 root root 655360 May  4  2018 Packages
drwxrwxr-x 2 root root   4096 May  4  2018 repodata
-rw-rw-r-- 1 root root   1690 Dec 10  2015 RPM-GPG-KEY-CentOS-7
-rw-rw-r-- 1 root root   1690 Dec 10  2015 RPM-GPG-KEY-CentOS-Testing-7
-r--r--r-- 1 root root   2883 May  4  2018 TRANS.TBL

Eject退出光盘的命令

eject # 弹出光驱

eject -r /dev/sr0 # 指定设备弹出

[yuchao-linux-242 root ~]#eject

U盘挂载

安装工具包
[yuchao-linux-242 root ~]#yum install usbutils -y

查看usb设备列表
[yuchao-linux-242 root ~]#lsusb

查看u盘信息
[yuchao-linux-242 root ~]#fdisk -l /dev/sdb

Disk /dev/sdb: 31.5 GB, 31457280000 bytes, 61440000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x3031b379

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *        4096    61439999    30717952    7  HPFS/NTFS/exFAT
[yuchao-linux-242 root ~]#


linux不认识exfat格式,你得重新格式化为linux可识别的文件系统,方可读写数据
比如进行格式化为xfs类型,可以读写数据。


# 注意这个是个危险命令,删除分区,就立即删除了,数据也没了
[yuchao-linux-242 root ~]#parted /dev/sdb

(parted) rm 1
(parted) p
Model: Generic Flash Disk (scsi)
Disk /dev/sdb: 31.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start  End  Size  Type  File system  Flags


u盘的分区没了

[yuchao-linux-242 root ~]#ls /dev/sdb*
/dev/sdb

重新格式化文件系统即可,比如格式化为xfs类型
[yuchao-linux-242 root ~]#mkfs.xfs  -f /dev/sdb

此时读写数据
[yuchao-linux-242 root ~]#mount /dev/sdb /my_usb/
[yuchao-linux-242 root ~]#
[yuchao-linux-242 root ~]#df -h|grep usb
/dev/sdb                  30G   33M   30G   1% /my_usb

[yuchao-linux-242 root ~]#touch /my_usb/超哥带你学linux
[yuchao-linux-242 root ~]#ls /my_usb/
超哥带你学linux

u盘格式化为ntfs类型

windows下可识别的ntfs类型

linux默认不支持格式化utfs,需要额外安装工具
[yuchao-linux-242 root ~]#yum install ntfsprogs -y

使用fdisk命令,给u盘设备分区
[yuchao-linux-242 root ~]#fdisk /dev/sdb

创建ntfs文件系统
[yuchao-linux-242 root ~]#mkfs.ntfs -f /dev/sdb1
Cluster size has been automatically set to 4096 bytes.
Creating NTFS volume structures.
mkntfs completed successfully. Have a nice day.

查看该设备的类型
[yuchao-linux-242 root ~]#blkid /dev/sdb1
/dev/sdb1: UUID="66D7C3B76DD0CF56" TYPE="ntfs" PTTYPE="dos"

linux默认不识别ntfs,你可以拿到windows中试试可否读写该u盘。



也可以安装工具,读写ntfs的u盘
[yuchao-linux-242 root ~]#yum install ntfs-3g -y

[yuchao-linux-242 root ~]#ntfs-3g /dev/sdb1 /my_usb/
[yuchao-linux-242 root ~]#
[yuchao-linux-242 root ~]#df -h |grep usb
/dev/sdb1                 30G   66M   30G   1% /my_usb
[yuchao-linux-242 root ~]#lsblk -f
NAME            FSTYPE      LABEL UUID                                   MOUNTPOINT
sda
├─sda1          xfs               c07b71e0-a0a4-41e5-9c12-24646b84c73f   /boot
└─sda2          LVM2_member       S2y7zo-9SQ9-prrr-ZOtT-NdW8-vVLo-jFwngl
  ├─centos-root xfs               0a7fed5a-edce-4354-aa17-2aa6781e1b85   /
  └─centos-swap swap              706d68e5-0a75-46d2-ab62-cede96863212   [SWAP]
sdb
└─sdb1          ntfs              66D7C3B76DD0CF56                       /my_usb
sr0
[yuchao-linux-242 root ~]#

可以正确读写数据
[yuchao-linux-242 root ~]#ls /my_usb/
[yuchao-linux-242 root ~]#touch /my_usb/超哥带你学linux.txt
[yuchao-linux-242 root ~]#ls /my_usb/
超哥带你学linux.txt
[yuchao-linux-242 root ~]#ls /my_usb/ -l
total 0
-rwxrwxrwx 1 root root 0 Mar 31 20:10 超哥带你学linux.txt
[yuchao-linux-242 root ~]#


取消挂载
[yuchao-linux-242 root ~]#umount /my_usb/

inode、block、硬链接

文件属性查看



什么是inode

linux的文件名,其实是分为了【元数据】+【文件内容】,两部分。

元数据,也就是文件的属性信息,可以通过stat命令查看到

一个新的磁盘,格式化文件系统后,就有了2个存储空间,一个叫做
inode存储空间,存储设备上,所有文件名,对应的元数据信息(文件的属性信息)
一个叫做block存储空间(存储设备上,所有的文件的内容,数据都在这)

存储元数据信息的空间,被称之为Inode

存储文件数据的空间,被称之为block


linux读取文件内容,其实是 以  文件名 > inode编号 > block 的顺序来读取


在你创建文件前必须先要分区、格式化(创建文件系统)
创建文件系统后inode和block的数量就会固定下来。
mkfs.xfs /dev/sdc 格式化xfs文件系统后,inode和block的数量就固定下来了
可以通过xfs_info查看


每个inode都有一个号码,操作系统用inode号码来识别不同的文件。
[yuchao-linux01 root /test1]$ls -l -i  /tmp/c* 
16777294 -rw-r--r-- 1 root root 0 Apr  7 11:01 /tmp/c1
16777702 -rw-r--r-- 1 root root 0 Apr  7 11:01 /tmp/c2

通过ls -i参数,查看文件,文件夹的inode号码
/opt/t1.log
/opt/t2.log 



这里值得重复一遍,Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。

表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。

使用如下命令,查看文件的inode号

[yuchao-linux01 root /opt]$ls -i 5G.txt
50391778 5G.txt

为什么linux要设计inode

理解inode,要从文件储存说起。

文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。

操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。

文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。

每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。

inode存储的内容

* 文件的字节数

* 文件拥有者的User ID

* 文件的Group ID

* 文件的读、写、执行权限

* 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。

* 链接数,即有多少文件名指向这个inode

* 文件数据block的位置

可以用stat命令,查看某个文件的具体inode信息

[yuchao-linux01 root /opt]$stat t1.log
  File: ‘t1.log’
  Size: 4         	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 50391810    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2022-04-06 19:15:09.577496171 +0800
Modify: 2022-04-06 19:15:09.577496171 +0800
Change: 2022-04-06 19:15:09.577496171 +0800
 Birth: -


图解文件访问原理

文件夹和文件的关系

目录是一个特殊的文件,目录保存的是当前目录下的文件名字
简单说,文件夹就是方便人类记忆文件存在哪、然后通过这个文件名吗,找到对应的文件inode号
inode号里记录了文件数据所处的block位置,最终访问到数据

什么是block

block是linux实际存储数据的空间,是8个连续的扇区,(8*512bytes=4KB)
单个大文件需要用多个block来存储
特别小的文件即使不满足4KB,也只能浪费其空间。

1 block =4kb

删除文件原理

软连接、硬链接

1.软连接就是windows下的快捷方式
软连接文件存储的是源文件的路径。

创建软连接 ln -s参数去创建软连接
↓
当你访问软连接文件,其实是
↓
访问到源文件的路径,源文件的文件名
↓
访问源文件的inode编号  ls -i filename
↓
inode找到block,访问到数据


软连接特点
1.软连接文件的inode号和源文件不同,作用是存储源文件的路径
2.命令ln -s创建
3.删除普通软连接,不影响源文件
4.删除源文件,软连接找不到目标,报错提示。

2.硬链接
硬链接,就是一个数据(block)被多个相同inode号的文件指向。

就好比超市有好多个大门,但是都能进入到这个超市。。。

  • 注意,大坑,硬链接,不得跨分区设置(inode号,是基于分区来创建)

创建语法
ln 源文件 目标文件

创建硬链接
[yuchao-linux01 root /opt]$ls -l  /yuchao.log
-rw-r--r-- 1 root root 0 Apr  6 20:24 /yuchao.log
[yuchao-linux01 root /opt]$
[yuchao-linux01 root /opt]$ln /yuchao.log /tmp/c1
[yuchao-linux01 root /opt]$ln /yuchao.log /tmp/c2
[yuchao-linux01 root /opt]$
[yuchao-linux01 root /opt]$ls -l  /yuchao.log
-rw-r--r-- 3 root root 0 Apr  6 20:24 /yuchao.log

检查多个硬链接的inode号,都是同一个,表示是指向同一个区域的数据
[yuchao-linux01 root /opt]$ls -i /yuchao.log
71295 /yuchao.log
[yuchao-linux01 root /opt]$ls -i /tmp/c1
71295 /tmp/c1
[yuchao-linux01 root /opt]$ls -i /tmp/c2
71295 /tmp/c2


硬链接特点
1.可以对已存在的文件做硬链接,该文件的硬链接数,至少是1,为0就表示文件不存在
2.硬链接的文件,inode相同,属性一致
3.只能在同一个磁盘分区下,同一个文件系统下创建硬链接
4.不能对文件夹创建硬链接,只有文件可以
5.删除一个硬链接,不影响其他相同inode号的文件
6.文件夹的硬链接,默认是2个,以及是2+(第一层子目录总数)=文件夹的硬链接数量
7.可以用任意一个硬链接作为入口,操作文件(修改的其实是block中的数据)
8.当文件的硬链接数为0时,文件真的被删除

文件夹的硬连接
文件夹是一个特殊的文件,默认的连接数就是2

由于文件夹中存在两个特殊子目录,一个是
. 当前目录,表示其本身
.. 上级目录,也能通过它,找到当前目录

因此硬连接数是2

如果修改文件的硬链接数,要在它,第一层文件夹中,创建子文件夹,即可增加硬链接数量

工作里咋用
1.一般会给文件夹添加软连接,便于管理
2.通过软连接来区分软件的多种版本
3.通过inode号彻底删除文件,和硬连接关联的

查看分区的inode和block数量(xfs_info)

inode和block的数量,是在你mkfs创建文件系统的时候,就已经确定好了

ext4的文件系统,查看文件系统信息的命令,dumpe2fs

xfs文件系统,查看文件系统信息的命令,xfs_info

查看某分区,有多少block让你用,(查看这个磁盘,分区还有多少容量)

df -h  # -h参数,是友好的显示容量单位,如kb ,mb,gb

查看某分区,一共有多少inode容量编号给我们用

如/dev/sdc1


[yuchao-linux01 root /opt]$df -i
Filesystem                Inodes  IUsed    IFree IUse% Mounted on
/dev/mapper/centos-root  8910848 129697  8781151    2% /
devtmpfs                  995986    426   995560    1% /dev
tmpfs                     999042      1   999041    1% /dev/shm
tmpfs                     999042   1317   997725    1% /run
tmpfs                     999042     16   999026    1% /sys/fs/cgroup
/dev/sda1                 524288    327   523961    1% /boot
tmpfs                     999042      1   999041    1% /run/user/0
/dev/sdc1               10485248      3 10485245    1% /opt/my_sdc

inode的作用

df -h
查看磁盘block空间的使用情况,如果看到分区快满了,可以去删除大容量的文件


df -i 
inode存储文件属性的
当你机器上有大量的无用的小文件,空文件,白白消耗inode数量

查看磁盘分区inode空间的使用情况,如果可用的不多的,删除大量的4kb小文件即可,因为它们真用了太多的无效inode编号,应该留给别人用。

明明 df -h看到磁盘还是有空间,但是写入数据,系统提示你
no space for disk,你虽然还有block空间可以存数据
但是你的inode数量肯定是没了

touch 创建新文件,想分配inode编号,发现不够用了
posted @   不太聪明的大鹅  阅读(124)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示