硬盘接口类型
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编号,发现不够用了
标签:linux01,管理,分区,dev,yuchao,linux,磁盘,root
From: https://www.cnblogs.com/btcm409181423/p/18008742