常见的硬件设备及其文件名称
硬件设备 | 文件名称 |
---|---|
IDE设备 | /dev/hd[a-d] |
SCSI/SATA/U盘 | /dev/sd[a-p] |
软驱 | /dev/fd[0-1] |
打印机 | /dev/lp[0-15] |
光驱 | /dev/cdrom |
鼠标 | /dev/mouse |
磁带机 | /dev/st0或/dev/ht0 |
fdisk命令
在Linux系统中,管理硬盘设备最常用的方法就当属fdisk命令了。fdisk命令用于管理磁盘分区,格式为“fdisk [磁盘名称]”,它提供了集添加、删除、转换分区等功能于一身的“一站式分区服务”。
fdisk命令中的参数以及作用
参数 | 作用 |
---|---|
m | 查看全部可用的参数 |
n | 添加新的分区 |
d | 删除某个分区信息 |
l | 列出所有可用的分区类型 |
t | 改变某个分区的类型 |
p | 查看分区表信息 |
w | 保存并退出 |
q | 不保存直接退出 |
案例需求:
添加一块硬盘,需要将其分区,最终需要使用2G空间。
案例思路
增加一块20G硬盘
使用fdisk命令进行分区
格式化指定分区
创建一个空的目录作为挂载点
挂载使用
创建新的挂载点
挂载使用
#步骤:
#1. 增加硬盘
# 增加完硬盘记得重启系统
# lsblk 查看硬盘是否添加成功
[root@zuolaoshi ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 512M 0 part /boot
├─sda2 8:2 0 3.5G 0 part [SWAP]
└─sda3 8:3 0 36G 0 part /
sdb 8:16 0 20G 0 disk
sr0 11:0 1 4.4G 0 rom
[root@zuolaoshi ~]# fdisk -l /dev/sdb
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
2. 使用fdisk命令分区
[root@zuolaoshi ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.32.1)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
设备不包含可识别的分区表。
创建了一个磁盘标识符为 0x0c7799c3 的新 DOS 磁盘标签。
命令(输入 m 获取帮助):p
Disk /dev/sdb:20 GiB,21474836480 字节,41943040 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0c7799c3
命令(输入 m 获取帮助):n
分区类型
p 主分区 (0个主分区,0个扩展分区,4空闲)
e 扩展分区 (逻辑分区容器)
选择 (默认 p):p
分区号 (1-4, 默认 1): 1
第一个扇区 (2048-41943039, 默认 2048): 此处敲击回车
上个扇区,+sectors 或 +size{K,M,G,T,P} (2048-41943039, 默认 41943039): +1G
创建了一个新分区 1,类型为“Linux”,大小为 1 GiB。
命令(输入 m 获取帮助):p
Disk /dev/sdb:20 GiB,21474836480 字节,41943040 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x80e196f2
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/sdb1 2048 2099199 2097152 1G 83 Linux
命令(输入 m 获取帮助):n
分区类型
p 主分区 (1个主分区,0个扩展分区,3空闲)
e 扩展分区 (逻辑分区容器)
选择 (默认 p):p
分区号 (2-4, 默认 2): 2
第一个扇区 (2099200-41943039, 默认 2099200): 此处敲击回车
上个扇区,+sectors 或 +size{K,M,G,T,P} (2099200-41943039, 默认 41943039): +1G
创建了一个新分区 2,类型为“Linux”,大小为 1 GiB。
命令(输入 m 获取帮助):p
Disk /dev/sdb:20 GiB,21474836480 字节,41943040 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x80e196f2
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/sdb1 2048 2099199 2097152 1G 83 Linux
/dev/sdb2 2099200 4196351 2097152 1G 83 Linux
命令(输入 m 获取帮助):w
分区表已调整。
将调用 ioctl() 来重新读分区表。
正在同步磁盘。
3. 再次查看分区情况
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 512M 0 part /boot
├─sda2 8:2 0 3.5G 0 part [SWAP]
└─sda3 8:3 0 36G 0 part /
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 1G 0 part
└─sdb2 8:18 0 1G 0 part
sr0 11:0 1 4.4G 0 rom
4. 刷新分区表信息
[root@zuolaoshi ~]# partprobe /dev/sdb
5. 格式化分区
[root@zuolaoshi ~]# mkfs.xfs /dev/sdb1
[root@zuolaoshi ~]# mkfs.ext4 /dev/sdb2
6. 创建新的挂载点
[root@zuolaoshi ~]# mkdir /u01
[root@zuolaoshi ~]# mkdir /u02
7. 挂载使用
[root@zuolaoshi ~]# mount /dev/sdb1 /u01
[root@zuolaoshi ~]# mount /dev/sdb2 /u02
8. 查看使用情况
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 900M 0 900M 0% /dev
tmpfs 910M 0 910M 0% /dev/shm
tmpfs 910M 9.6M 901M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/sda3 36G 2.5G 34G 7% /
/dev/sda1 509M 138M 371M 28% /boot
tmpfs 182M 0 182M 0% /run/user/0
/dev/sdb1 1014M 33M 982M 4% /u01
/dev/sdb2 976M 2.6M 907M 1% /u02
SWAP(交换)分区是一种通过在硬盘中预先划分一定的空间,然后将把内存中暂时不常用的数据临时存放到硬盘中,以便腾出物理内存空间让更活跃的程序服务来使用的技术,其设计目的是为了解决真实物理内存不足的问题。 但由于交换分区毕竟是通过硬盘设备读写数据的,速度肯定要比物理内存慢,所以只有当真实的物理内存耗尽后才会调用交换分区的资源。 交换分区的创建过程与前文讲到的挂载并使用存储设备的过程非常相似。 在对/dev/sdb存储设备进行分区操作前,有必要先说一下交换分区的划分建议:在生产环境中,交换分区的大小一般为真实物理内存的1.5~2倍,为了让大家更明显地感受交换分区空间的变化,这里取出一个大小为5GB的主分区作为交换分区资源。在分区创建完毕后保存并退出即可:
[root@zuolaoshi ~]# 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 0xb3d27ce1.
Command (m for help): n
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p): p
分区号 (3,4,默认 3):
First sector (4196352-41943039, default 4196352): 此处敲击回车
Using default value 4196352
Last sector, +sectors or +size{K,M,G} (4196352-41943039, default 41943039): +5G
Partition 2 of type Linux and of size 5 GiB is set
Command (m for help): p
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: 0xb0ced57f
Device Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
/dev/sdb2 4196352 14682111 5242880 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
使用SWAP分区专用的格式化命令mkswap,对新建的主分区进行格式化操作:
[root@zuolaoshi ~]# mkswap /dev/sdb3
Setting up swapspace version 1, size = 5242876 KiB
no label, UUID=2972f9cb-17f0-4113-84c6-c64b97c40c75
使用swapon命令把准备好的SWAP分区设备正式挂载到系统中。我们可以使用free -m命令查看交换分区的大小变化(由2047MB增加到7167MB):
[root@zuolaoshi ~]# free -m
total used free shared buffers cached
Mem: 1483 782 701 9 0 254
-/+ buffers/cache: 526 957
Swap: 2047 0 2047
[root@linuxprobe ~]# swapon /dev/sdb3
[root@linuxprobe ~]# free -m
total used free shared buffers cached
Mem: 1483 785 697 9 0 254
-/+ buffers/cache: 530 953
Swap: 7167 0 7167
为了能够让新的交换分区设备在重启后依然生效,需要按照下面的格式将相关信息写入到配置文件中,并记得保存:
[root@zuolaoshi ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed May 4 19:26:23 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=e7acdca9-177e-485e-acd1-63a7c14e7c44 / xfs defaults 0 0
UUID=a70d81c1-e12e-41bd-900c-436c77c5f1bd /boot xfs defaults 0 0
UUID=f108de69-644d-4a6a-80a5-8d5e73213060 swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
/dev/sdb1 /u01 xfs defaults 0 0
/dev/sdb2 /u02 ext4 defaults 0 0
/dev/sdb3 swap swap defaults 0 0
字段定义
/etc/fstab 文件包含了如下字段,通过空格或 Tab 分割:
<file system> <dir> <type> <options> <dump> <pass>
<file system> - 要挂载的分区或存储设备。
<dir> - <file system> 的挂载位置。
<type> - 要挂载设备伙食分区的文件系统类型,支持许多种不同的文件系统:ext2,ext3,ext4,reiserfs,xfs,jfs,smbfs,iso9660,vfat,ntfs,swap 及 auto。设置成 auto 类型,mount 命令会猜测使用的文件系统类型,对 CDROM 和 DVD 等移动设备是非常有用的。
<options> - 挂载时使用的参数,注意有些 mount 参数是特定文件系统才有的。一些比较常见的参数有:
> auto - 在启动时或键入了 mount -a 命令是自动挂载。
> noauto - 只在你的命令下被挂载。
> exec - 允许执行此分区的二进制文件。
> noexec - 不允许执行此文件系统上的二进制文件。
> ro - 以只读模式挂载文件系统。
> rw - 以读写模式挂载文件系统。
> user - 允许任意用户挂载此文件系统,若无显示定义,隐含启用 noexec,nosuid,nodev 参数。
> users - 允许所有 users 组中的用户挂载文件系统。
> nousers - 只能被 root 挂载。
> owner - 允许设备所有者挂载。
> sync - I/O 同步进行。
> async - I/O 异步进行。
> dev - 解析文件系统上的块特殊设备。
> nodev - 不解析文件系统上的块特殊设备。
> suid - 允许 suid 操作和设定 sgid 位。这一参数通常用于一些特殊任务,使一般用户运行程序临时提升权 限。
> nosuid - 禁止 suid 操作和设定 sgid 位。
> noatime - 不更新文件系统上 inode 访问记录,可以提升性能(参见 atime 参数)。
> nodiratime - 不更新文件系统上的目录 inode 访问记录,可以提升性能(参见 atime 参数)。
> relatime - 实时更新 inode access 记录。只有在记录中的访问时间早于当前访问才会被更新。(与 noatime 相似,但不会打断 mutt 或其他程序探测文件在上次访问后是否被修改的进程。),可以提升性能(参见 atime 参数)。
> flush - vfat 的选项,更频繁的刷新数据,复制对话框或进度条在全部数据都写入后才消失。
> defaults - 使用文件系统的默认挂载参数,例如 ext4 的默认参数为:rw,suid,dev,exec,auto, nouser,async。
<dump> - dump 工具通过它决定何时做备份,dump 会检查其内容,并用数字来决定是否对这个文件系统进行备份。允许的数字是 0 和 1。0 标识忽略,1 则进行备份。大部分的用户是没有安装 dump 的,对他们而言 <dump> 应设为 0。
<pass> - fsck 读取 <pass> 的数值来决定需要检查的文件系统的检查顺序。允许的数字是 0 ,1 和 2。根目录应当获得最高的优先权 1,其它所有需要被检查的设备设置为 2。0 表示设备不会被 fsck 所检查。
在Linux系统中存在硬链接和软连接两种文件。
硬链接(hard link):可以将它理解为一个“指向原始文件inode的指针”,系统不为它分配独立的inode和文件。所以,硬链接文件与原始文件其实是同一个文件,只是名字不同。我们每添加一个硬链接,该文件的inode连接数就会增加1;而且只有当该文件的inode连接数为0时,才算彻底将它删除。换言之,由于硬链接实际上是指向原文件inode的指针,因此即便原始文件被删除,依然可以通过硬链接文件来访问。需要注意的是,由于技术的局限性,我们不能跨分区对目录文件进行链接。
软链接(也称为符号链接[symbolic link]):仅仅包含所链接文件的路径名,因此能链接目录文件,也可以跨越文件系统进行链接。但是,当原始文件被删除后,链接文件也将失效,从这一点上来说与Windows系统中的“快捷方式”具有一样的性质。
ln命令
ln命令用于创建链接文件,格式为“ln [选项] 目标”。
参数 | 作用 |
---|---|
-s | 创建“符号链接”(如果不带-s参数,则默认创建硬链接) |
-f | 强制创建文件或目录的链接 |
-i | 覆盖前先询问 |
-v | 显示创建链接的过程 |
[root@zuolaoshi ~]# echo "Welcome to zuolaoshi.cn" > readme.txt
[root@zuolaoshi ~]# ln -s readme.txt readit.txt
[root@zuolaoshi ~]# cat readme.txt
Welcome to zuolaoshi.com
[root@zuolaoshi ~]# cat readit.txt
Welcome to zuolaoshi.com
[root@zuolaoshi ~]# ls -l readme.txt
-rw-r--r-- 1 root root 26 Jan 11 00:08 readme.txt
[root@zuolaoshi ~]# rm -f readme.txt
[root@zuolaoshi ~]# cat readit.txt
cat: readit.txt: No such file or directory
接下来针对一个原始文件创建一个硬链接,即相当于针对原始文件的硬盘存储位置创建了一个指针,这样一来,新创建的这个硬链接就不再依赖于原始文件的名称等信息,也不会因为原始文件的删除而导致无法读取。同时可以看到创建硬链接后,原始文件的硬盘链接数量增加到了2。
[root@zuolaoshi ~]# echo "Welcome to zuolaoshi.cn" > readme.txt
[root@zuolaoshi ~]# ln readme.txt readit.txt
[root@zuolaoshi ~]# cat readme.txt
Welcome to zuolaoshi.cn
[root@zuolaoshi ~]# cat readit.txt
Welcome to zuolaoshi.cn
[root@zuolaoshi ~]# ls -l readme.txt
-rw-r--r-- 2 root root 26 Jan 11 00:13 readme.txt
[root@zuolaoshi ~]# rm -f readme.txt
[root@zuolaoshi ~]# cat readit.txt
Welcome to zuolaoshi.cn