目录
1、认识磁盘
磁盘是计算机中的主要存储设备,一般由主轴、盘片和读写磁头组成,磁盘的结构如图所示。
2、磁盘运行机制
多个盘片之间靠主轴连接,电机带动主轴做旋转运动,通过多个磁头臂的摇摆和磁盘的旋转,磁头就可以在磁盘旋转的过程中就读取到磁盘中存储的各种数据。
3、磁盘的扇区、磁道、柱面
(1)磁道:磁盘的每个盘面被划分为许多同心圆,这些同心圆的轨道叫做磁道。
(2)扇区:一个盘面划分为若干个内角相同的扇形,这样盘面上的每个磁道就被分为若干段圆弧,每段圆弧叫做一个扇区。每个扇区中的数据作为一个单元同时被读入或写入。每一个扇区是512字节,其中有64个字节存储的是分区表,一条分区信息占16个字节。
(3)柱面:每一个盘片同一大小的同心圆可以看成连在一起的柱面,磁盘在分区的时候最小单位是柱面,每一个盘片的上下面都可以读取数据,每一个磁头,不可以跨盘面读取数据。
4、主引导记录、磁盘分区表、魔数
磁盘中第一个扇区非常重要,其中存储了与磁盘正常使用相关的重要信息。
(1)主引导记录(MBR):Linux 系统初始化时,会根据MBR来识别硬盘设备,占据硬盘0磁道的第一个扇区。
MBR 中,包括用来载入操作系统的可执行代码,实际上,此可执行代码就是 MBR 中前 446 个字节的 boot loader 程序(引导加载程序),而在 boot loader 程序之后的 64 个(16×4)字节的空间,就是存储的分区表(Partition table)相关信息。
(2)磁盘分区表:占用64个字节,由于 MBR 留给分区表的磁盘空间只有 64 个字节,而每个分区表的大小为 16 个字节,所以在一个硬盘上最多可以划分出 4 个主分区。如果想要在一个硬盘上划分出 4 个以上的分区时,可以通过在硬盘上先划分出一个可扩展分区的方法来增加额外的分区。
(3)魔数:占用2个字节,用来标识MBR是否有效。
5、硬盘分区
磁盘分区是使用分区编辑器在磁盘上划分几个逻辑部分。碟片一旦划分成数个分区,不同类的目录与文件可以存储进不同的分区。
(1)分区类型:
主分区最多只能有四个;
扩展分区:最多只能有1个;主分区加扩展分区最多有4个;扩展分区不能写入数据,只能包含逻辑分区。
逻辑分区:扩展分区必须在进行分区后才能使用,逻辑分区没有数量上的限制。
(2)格式化
Linux中,硬盘分区后,还要对其进行格式化,也就是写入文件系统。格式化又称逻辑格式化,它是指根据用户选定的文件系统(如,EXT2、EXT3、EXT4等),在磁盘的特定区域写入特定数据,在分区中划分一片用于存放文件分配表、目录表等用于文件管理的磁盘空间。
(3)、文件系统查看命令df
命令使用格式:df [选项 ] [ 挂载点]
选项:
(4)统计目录或文件大小
命令使用格式:du [选项 ] [ 目录或文件名]
选项:
(5)du命令和df命令的区别
df命令是从文件系统考虑的,不光要考虑文件占用的空间,还要统计被命令或程序占用的空间(最常见的就是文件已经删除,但是程序并没有释放空间)
du命令是面向文件的,只会计算文件或目录占用的空间。
6、磁盘挂载与分区
(1)查看磁盘分区情况
使用命令“fdisk -l” 可以列出指定设备的分区表状况
[root@localhost tania]# fdisk -l
磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000cbb58
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 41943039 19921920 8e Linux LVM
磁盘 /dev/sdb:8589 MB, 8589934592 字节,16777216 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x8b6cd147
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 16777215 8387584 83 Linux
磁盘 /dev/mapper/centos-root:18.2 GB, 18249416704 字节,35643392 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/mapper/centos-swap:2147 MB, 2147483648 字节,4194304 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
(2)挂载磁盘
打开虚拟机界面,找到我们安装的虚拟机名称,右键-设置;
选择添加一块硬盘,如图所示:
点击下一步后,选择磁盘类型,因为我们安装时设置的是IDE,则这里也要选择IDE类型,点击下一步。
在出现的页面中,选择创建新虚拟磁盘。
按图示设置,点击下一步。
文件名称默认,点击完成,后点击确定按钮,即可完成新磁盘的添加。
此时,开机,此时查看磁盘情况,键入命令“fdisk -l”,如下图所示,证明我们刚添加的磁盘已经被系统所挂载。
目前只是被系统挂载,但我们不能使用,因为没有分区:
(3)硬盘分区
运行以下命令分区刚刚添加的硬盘:
[root@localhost tania]# fdisk -u /dev/sdc
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x88933be6 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):
输入p查看数据盘的分区情况。本示例中,数据盘没有分区。
命令(输入 m 获取帮助):p
磁盘 /dev/sdc:8589 MB, 8589934592 字节,16777216 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x8da2314c
设备 Boot Start End Blocks Id System
输入n创建一个新分区。
输入p选择分区类型为主分区。
说明 创建一个单分区数据盘可以只创建主分区。如果要创建四个以上分区,您应该至少选择一次e(extended),创建至少一个扩展分区。
输入分区编号,按回车键。
本示例中,仅创建一个分区,直接按回车键,采用默认值1。
输入第一个可用的扇区编号,按回车键。
本示例中,直接按回车键,采用默认值63。
输入最后一个扇区编号,按回车键。
本示例中,仅创建一个分区,直接按回车键,采用默认值。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-16777215,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-16777215,默认为 16777215):
将使用默认值 16777215
分区 1 已设置为 Linux 类型,大小设为 8 GiB
输入p查看该数据盘的规划分区情况。
命令(输入 m 获取帮助):p
磁盘 /dev/sdc:8589 MB, 8589934592 字节,16777216 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x8da2314c
设备 Boot Start End Blocks Id System
/dev/sdc1 2048 16777215 8387584 83 Linux
输入w开始分区,并在完成分区后退出。
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
(4)查看新分区信息
运行以下命令:
[root@localhost tania]# fdisk -lu /dev/sdc
磁盘 /dev/sdc:8589 MB, 8589934592 字节,16777216 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x8da2314c
设备 Boot Start End Blocks Id System
/dev/sdc1 2048 16777215 8387584 83 Linux
(5)为分区进行格式化操作(写入文件系统)
运行以下命令,为刚刚的分区创建一个ext4文件系统。
[root@localhost tania]# mkfs -t ext4 /dev/sdc1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
524288 inodes, 2096896 blocks
104844 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2147483648
64 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
(6)挂载命令格式
例如:在/ 目录下新建一个data文件夹,然后将磁盘挂载到/data 目录下
[root@localhost /]# mkdir /data
[root@localhost /]# ls
bin data etc lib media opt root sbin sys usr
boot dev home lib64 mnt proc run srv tmp var
[root@localhost /]# mount /dev/sdc1 /data
[root@localhost /]# df -lh
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 470M 0 470M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 8.6M 478M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/mapper/centos-root 17G 5.2G 12G 31% /
/dev/sda1 1014M 172M 843M 17% /boot
tmpfs 98M 20K 98M 1% /run/user/1000
/dev/sr0 4.4G 4.4G 0 100% /run/media/tania/CentOS 7 x86_64
/dev/sdc1 7.8G 36M 7.3G 1% /data
(7)卸载磁盘
执行umount /dev/sdc1命令,即可卸载已挂载的磁盘
[root@localhost /]# umount /dev/sdc1
[root@localhost /]# df -lh
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 470M 0 470M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 8.6M 478M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/mapper/centos-root 17G 5.2G 12G 31% /
/dev/sda1 1014M 172M 843M 17% /boot
tmpfs 98M 20K 98M 1% /run/user/1000
/dev/sr0 4.4G 4.4G 0 100% /run/media/tania/CentOS 7 x86_64
7、链接文件
(1)软链接
ln -s 源文件 目标文件,这时会创建一个软链接文件。把hello.sh链接到test目录下。
[root@localhost tania]# ln -s hello.sh ./test
ln: 无法创建符号链接"./test/hello.sh": 文件已存在
[root@localhost tania]# cd test/
[root@localhost test]# ll
总用量 0
lrwxrwxrwx. 1 root root 8 6月 1 17:11 hello.sh -> hello.sh
(2)硬链接
把当前目录下的example.sh 文件链接到 /test目录下的a.sh。
使用硬链接时,硬链接会创建独立的虚拟文件,其中包含了原始文件的信息及位置。
[root@localhost tania]# ln example.sh ./test/a.sh
[root@localhost tania]# cd test/
[root@localhost test]# ll
总用量 4
-rw-r--r--. 2 root root 130 3月 3 14:46 a.sh
lrwxrwxrwx. 1 root root 8 6月 1 17:11 hello.sh -> hello.sh
-rw-r--r--. 1 root root 0 6月 1 17:14 test.sh
(3)取消链接
在目标文件位置处,执行rm –rf 目标文件名,即取消了链接。
[root@localhost test]# rm -rf a.sh
[root@localhost test]# ll
总用量 0
lrwxrwxrwx. 1 root root 8 6月 1 17:11 hello.sh -> hello.sh
-rw-r--r--. 1 root root 0 6月 1 17:14 test.sh