一、物理设备的命名规则
在Linux 系统中一切都是文件,硬件设备也不例外。既然是文件,就必须有文件名称。系统内核中的udev 设备管理器会自动把硬件名称规范起来,目的是让用户通过设备文件的名字可以猜出设备大致的属性以及分区信息等;这对于陌生的设备来说特别方便。另外,udev设备管理器的服务会一直以守护进程的形式运行并侦听内核发出的信号来管理/dev 目录下的设备文件。Linux 系统中常见的硬件设备的文件名称如下表所示:
由于现在的IDE 设备已经很少见了,所以一般的硬盘设备都会是以/dev/sd开头的。而一台主机上可以有多块硬盘,因此系统采用a~p 来代表16 块不同的硬盘(默认从a 开始分配),而且硬盘的分区编号也很有讲究:
主分区或扩展分区的编号从1 开始,到4 结束;
逻辑分区从编号5 开始。
设备名称和分区名称
设备名称:
/dev 目录中sda 设备之所以是a,并不是由插槽决定的,而是由系统内核的识别顺序来决定的,而恰巧很多主板的插槽顺序就是系统内核的识别顺序,因此才会被命名为/dev/sda。大家以后在使用iSCSI 网络存储设备时就会发现,明明主板上第二个插槽是空着的,但系统却能识别到/dev/sdb 这个设备就是这个道理。
分区名称:
首先,分区的编号并不代表着分区的个数,比如sda3 表示这是设备上的第三个分区,这个是错误的。因为分区的数字编码不一定是强制顺延下来的,也有可能是手工指定的。因此sda3 只能表示是编号为3 的分区,而不能判断sda 设备上已经存在了3 个分区。
在填了这两个坑之后,再来分析一下/dev/sda5 这个设备文件名称包含哪些信息,如下图所示:
首先,/dev/目录中保存的应当是硬件设备文件;其次,sd 表示是存储设备;然后,a 表示系统中同类接口中第一个被识别到的设备,最后,5 表示这个设备是一个逻辑分区。一言以蔽之,/dev/sda5表示的就是这是系统中第一块被识别到的硬件设备中分区编号为5的逻辑分区的设备文件。接下来简单科普一下硬盘相关的知识。
正是因为计算机有了硬盘设备,我们才可以在玩游戏的过程中或游戏通关之后随时存档,而不用每次重头开始。硬盘设备是由大量的扇区组成的,每个扇区的容量为512 字节。其中第一个扇区最重要,它里面保存着主引导记录与分区表信息。就第一个扇区来讲,主引导记录需要占用446 字节,分区表为64 字节,结束符占用2 字节;其中分区表中每记录一个分区信息就需要16 字节,这样一来最多只有4 个分区信息可以写到第一个扇区中,这4 个分区就是4 个主分区。第一个扇区中的数据信息如下图所示:
二、常用磁盘操作命令
1、分区
A:fdisk不支持大于2TB磁盘 查看、添加、删除、转换分区
B:parted支持大于2TB磁盘
新增分区格式化时提示设备文件不存在:--- No such file or directory的处理方法
来自 <https://blog.csdn.net/huangjin0507/article/details/44619115?utm_source=blogxgwz0>
创建设备文件mknod
来自 <https://www.cnblogs.com/lph970417/p/11547861.html>
方法一:通过命令mknod /dev/sda4 b 8 4(其中b是block型设备文件,8是主设备号,4是辅助设备号)
[[email protected] ~]# ls -l /dev/sda*
brw-rw----. 1 root disk 8, 0 Oct 12 23:55 /dev/sda
brw-rw----. 1 root disk 8, 1 Oct 12 23:25 /dev/sda1
brw-rw----. 1 root disk 8, 2 Oct 12 23:25 /dev/sda2
brw-rw----. 1 root disk 8, 3 Oct 12 23:25 /dev/sda3
brw-r--r--. 1 root root 8, 4 Oct 13 00:13 /dev/sda4
设备文件出来了。(但是手动好像权限有问题,个人推荐下面的自动方法)
方法二:利用start_udev中创建设备文件
[[email protected] ~]# ls -l /dev/sda*
brw-rw----. 1 root disk 8, 0 Oct 13 00:23 /dev/sda
brw-rw----. 1 root disk 8, 1 Oct 13 00:23 /dev/sda1
brw-rw----. 1 root disk 8, 2 Oct 13 00:23 /dev/sda2
brw-rw----. 1 root disk 8, 3 Oct 13 00:23 /dev/sda3
brw-rw----. 1 root disk 8, 4 Oct 13 00:23 /dev/sda4
brw-rw----. 1 root disk 8, 5 Oct 13 00:23 /dev/sda5
设备文件成功创建了。
重启后生效,可进行格式化不然会提示:没有那个设备地址while trying to determine filesystem size
来自 <https://blog.csdn.net/huangjin0507/article/details/44619115>
2、格式化
Mkfs.ext4 /dev/sda?
Mke2fs -t ext4 -L sdb? -b 4096 /dev/sdb?
-b:分区时设定每个数据块占用空间大小,目前支持1024、2048以及4096 bytes每个块;
-i:设定inode的大小;
-N:设定inode数量,有时使用默认的inode数不够用,所以要自定设定inode数量;
-c:在格式化前先检测一下磁盘是否有问题,加上这个选项后会非常慢;
-L:预设该分区的标签label;
-j:建立ext3格式的分区,如果使用mkfs.ext3就不用加这个选项了;
-t:用来指定什么类型的文件系统,可以是ext2、ext3也可以是ext4;
-m:格式化时,指定预留给管理员的磁盘比例,是一个百分比,只针对mke2fs命令;
来自 <https://www.jb51.net/article/129414.htm>
3、挂载
先有目录才能挂载
如新增分区/dev/sda6 指定挂载到/mydata ,如目录/mydata不存在,那么需要先mkdir /mydata
--挂接命令(mount)
首先,介绍一下挂接(mount)命令的使用方法,mount命令参数非常多,这里主要讲一下今天我们要用到的。
命令格式:mount [-t vfstype] [-o options] device dir
1、-t vfstype 指定文件系统的类型,通常不必指定,mount 会自动选择正确的类型。
光盘或光盘镜像:iso9660
DOS fat16文件系统:msdos
Windows 9x fat32文件系统:vfat
Windows NT ntfs文件系统:ntfs
Mount Windows文件网络共享:smbfs
UNIX(LINUX) 文件网络共享:nfs
2、-o options 主要用来描述设备或档案的挂接方式。
loop:用来把一个文件当成硬盘分区挂接上系统
ro:采用只读方式挂接设备
rw:采用读写方式挂接设备
iocharset:指定访问文件系统所用字符集
3、device 要挂接(mount)的设备。
4、dir设备在系统上的挂接点(mount point)。
--挂接光盘镜像文件
1、从光盘制作光盘镜像文件。将光盘放入光驱,执行下面的命令。
#cp /dev/cdrom /home/sunky/mydisk.iso 或
#dd if=/dev/cdrom of=/home/sunky/mydisk.iso
注:执行上面的任何一条命令都可将当前光驱里的光盘制作成光盘镜像文件/home/sunky/mydisk.iso
2、将文件和目录制作成光盘镜像文件,执行下面的命令。
#mkisofs -r -J -V mydisk -o /home/sunky/mydisk.iso /home/sunky/ mydir
注:这条命令将/home/sunky/mydir目录下所有的目录和文件制作成光盘镜像文件/home/sunky/mydisk.iso,光盘卷标为:mydisk
3、光盘镜像文件的挂接(mount)
#mkdir /mnt/vcdrom
注:建立一个目录用来作挂接点(mount point)
#mount -o loop -t iso9660 /home/sunky/mydisk.iso /mnt/vcdrom
注:使用/mnt/vcdrom就可以访问光盘镜像文件mydisk.iso里的所有文件了。
--挂接移动硬盘
对linux系统而言,USB接口的移动硬盘是当作SCSI设备对待的。插入移动硬盘之前,应先用fdisk –l或more /proc/partitions查看系统的硬盘和硬盘分区情况。
[root at pldyrouter /]# fdisk -l
接好移动硬盘后,再用fdisk –l或more。
/proc/partitions查看系统的硬盘和硬盘分区情况,应该可以发现多了一个SCSI硬盘/dev/sdc和它的两个磁盘分区/dev
/sdc1、/dev/sdc2,其中/dev/sdc5是/dev/sdc2分区的逻辑分区,我们可以使用下面的命令挂接/dev/sdc1和
/dev/sdc5。
#mkdir -p /mnt/usbhd1
#mkdir -p /mnt/usbhd2
注:建立目录用来作挂接点(mount point)
#mount -t ntfs /dev/sdc1 /mnt/usbhd1
#mount -t vfat /dev/sdc5 /mnt/usbhd2
注:对ntfs格式的磁盘分区应使用-t ntfs参数,对fat32格式的磁盘分区应使用-t vfat参数。若汉字文件名显示为乱码或不显示,可以使用下面的命令格式。
#mount -t ntfs -o iocharset=cp936 /dev/sdc1 /mnt/usbhd1
#mount -t vfat -o iocharset=cp936 /dev/sdc5 /mnt/usbhd2
linux系统下使用fdisk分区命令和mkfs文件系统创建命令可以将移动硬盘的分区制作成linux系统所特有的ext2、ext3格式。这样,在linux下使用就更方便了。使用下面的命令直接挂接即可。
#mount /dev/sdc1 /mnt/usbhd1
--挂接U盘
和USB接口的移动硬盘一样对linux系统而言U盘也是当作SCSI设备对待的。使用方法和移动硬盘完全一样。插入U盘之前,应先用fdisk –l 或more /proc/partitions查看系统的硬盘和硬盘分区情况。
[root at pldyrouter root]# fdisk -l
插入U盘后,再用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况。
[root at pldyrouter root]# fdisk -l
系统多了一个SCSI硬盘/dev/sdd和一个磁盘分区/dev/sdd1,/dev/sdd1就是我们要挂接的U盘。
#mkdir -p /mnt/usb
注:建立一个目录用来作挂接点(mount point)
#mount -t vfat /dev/sdd1 /mnt/usb
注:现在可以通过/mnt/usb来访问U盘了, 若汉字文件名显示为乱码或不显示,可以使用下面的命令。
#mount -t vfat -o iocharset=cp936 /dev/sdd1 /mnt/usb
--挂接Windows文件共享
Windows网络共享的核心是SMB/CIFS,在linux下要挂接(mount)windows的磁盘共享,就必须安装和使用samba
软件包。现在流行的linux发行版绝大多数已经包含了samba软件包,如果安装linux系统时未安装samba请首先安装samba。当然也可以到www.samba.org网站下载新的版本是3.0.10版。
当windows系统共享设置好以后,就可以在linux客户端挂接(mount)了,具体操作如下:
# mkdir –p /mnt/samba
注:建立一个目录用来作挂接点(mount point)
# mount -t smbfs -o username=administrator,password=pldy123 //10.140.133.23/c$ /mnt/samba
注:administrator 和 pldy123 是ip地址为10.140.133.23 windows计算机的一个用户名和密码,c$是这台计算机的一个磁盘共享。
如此就可以在linux系统上通过/mnt/samba来访问windows系统磁盘上的文件了。以上操作在redhat as server3、redflag server 4.1、suse server 9以及windows NT 4.0、windows 2000、windowsxp、windows 2003环境下测试通过。
--挂接UNIX系统NFS文件共享
类似于windows的网络共享,UNIX(Linux)系统也有自己的网络共享,那就是NFS(网络文件系统),下面我们就以SUN Solaris2.8和REDHAT as server 3 为例简单介绍一下在linux下如何mount nfs网络共享。
在linux客户端挂接(mount)NFS磁盘共享之前,必须先配置好NFS服务端。
1、Solaris系统NFS服务端配置方法如下:
(1)修改 /etc/dfs/dfstab, 增加共享目录
share -F nfs -o rw /export/home/sunky
(2)启动nfs服务
# /etc/init.d/nfs.server start
(3)NFS服务启动以后,也可以使用下面的命令增加新的共享
# share /export/home/sunky1
# share /export/home/sunky2
注:/export/home/sunky和/export/home/sunky1是准备共享的目录
2、linux系统NFS服务端配置方法如下:
(1)修改 /etc/exports,增加共享目录
/export/home/sunky 10.140.133.23(rw)
/export/home/sunky1 *(rw)
/export/home/sunky2 linux-client(rw)
注:/export/home/目录下的sunky、sunky1、sunky2是准备共享的目录,10.140.133.23、*、
linux-client是被允许挂接此共享linux客户机的IP地址或主机名。如果要使用主机名linux-client必须在服务端主机
/etc/hosts文件里增加linux-client主机ip定义。格式如下:
10.140.133.23 linux-client
(2)启动与停止NFS服务
/etc/rc.d/init.d/portmap start (在REDHAT中PORTMAP是默认启动的)
/etc/rc.d/init.d/nfs start 启动NFS服务
/etc/rc.d/init.d/nfs stop 停止NFS服务
注:若修改/etc/export文件增加新的共享,应先停止NFS服务,再启动NFS服务方能使新增加的共享起作用。
使用命令exportfs -rv也可以达到同样的效果。
3、linux客户端挂接(mount)其他linux系统或UNIX系统的NFS共享
# mkdir –p /mnt/nfs
注:建立一个目录用来作挂接点(mount point)
#mount -t nfs -o rw 10.140.133.9:/export/home/sunky /mnt/nfs
注:这里我们假设10.140.133.9是NFS服务端的主机IP地址,当然这里也可以使用主机名,但必须在本机/etc/hosts文件里增加服务端ip定义。/export/home/sunky为服务端共享的目录。
如此就可以在linux客户端通过/mnt/nfs来访问其它linux系统或UNIX系统以NFS方式共享出来的文件了。
以上操作在 redhat as server 3、redflag server4.1、suse server 9以及Solaris 7、Solaris 8、Solaris 9 for x86&sparc环境下测试通过。
--补充:
linux加载光驱:
(1)使用光驱前,要先mount一下:
#mount /dev/cdrom /mnt/cdrom
然后您就可以进入/mnt/cdrom目录下读取光盘内容了。
(2)当您想退出光盘时,须使用umout命令,否则光驱就会一直处于死锁状态:
#umount /mnt/cdrom
三、常用信息查看命令
mount -l 查看已挂载的设备
fdisk -l 查看所有挂载和未挂载的分区,但不显示文件系统类型。
parted -l 查看未挂载的文件系统类型,以及哪些分区尚未格式化。
lsblk -f 查看未挂载的文件系统类型。
file -s /dev/sda1 查看某一个磁盘文件系统相关信息
df -T 查看已经挂载的分区和文件系统类型。
1、****查看块设备信息命令:lsblk****
1)简单用法:
lsblk命令可以列出所有可用块设备的信息,比如我们说的逻辑磁盘,默认情况下将以树状列出所有块设备。
[[email protected] /]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 40G 0 part /
└─sda2 8:2 0 4G 0 part [SWAP]
sr0 11:0 1 3.6G 0 rom /mnt
2)lsblk选项:
lsblk --help
[[email protected] /]# lsblk --help
用法:
lsblk [选项] [<设备> ...]
选项:
-a, --all 打印所有设备
-b, --bytes 以字节为单位而非易读的格式来打印 SIZE
-d, --nodeps 不打印从属设备(slave)或占位设备(holder)
-D, --discard 打印时丢弃能力
-e, --exclude <列表> 根据主设备号排除设备(默认:内存盘)
-I, --include <列表> 只显示有指定主设备号的设备
-f, --fs 输出文件系统信息
-h, --help 使用信息(此信息)
-i, --ascii 只使用 ascii 字符
-m, --perms 输出权限信息
-l, --list 使用列表格式的输出
-n, --noheadings 不打印标题
-o, --output <列表> 输出列
-p, --paths 打印完整设备路径
-P, --pairs 使用 key=“value” 输出格式
-r, --raw 使用原生输出格式
-s, --inverse 反向依赖
-t, --topology 输出拓扑信息
-S, --scsi 输出有关 SCSI 设备的信息
-h, --help 显示此帮助并退出
-V, --version 输出版本信息并退出
2、****查看文件系统磁盘空间信息命令:df ****
1)常用选项:
2)范例:
① -a选项:
[[email protected] /]# df -a
文件系统 1K-块 已用 可用 已用% 挂载点
rootfs 41922560 3300768 38621792 8% /
proc 0 0 0 - /proc
sysfs 0 0 0 - /sys
devtmpfs 2007776 0 2007776 0% /dev
securityfs 0 0 0 - /sys/kernel/security
tmpfs 2016816 148 2016668 1% /dev/shm
devpts 0 0 0 - /dev/pts
tmpfs 2016816 9016 2007800 1% /run
tmpfs 2016816 0 2016816 0% /sys/fs/cgroup
cgroup 0 0 0 - /sys/fs/cgroup/systemd
pstore 0 0 0 - /sys/fs/pstore
cgroup 0 0 0 - /sys/fs/cgroup/cpuset
cgroup 0 0 0 - /sys/fs/cgroup/cpu,cpuacct
cgroup 0 0 0 - /sys/fs/cgroup/memory
cgroup 0 0 0 - /sys/fs/cgroup/devices
cgroup 0 0 0 - /sys/fs/cgroup/freezer
cgroup 0 0 0 - /sys/fs/cgroup/net_cls
cgroup 0 0 0 - /sys/fs/cgroup/blkio
cgroup 0 0 0 - /sys/fs/cgroup/perf_event
cgroup 0 0 0 - /sys/fs/cgroup/hugetlb
configfs 0 0 0 - /sys/kernel/config
/dev/sda1 41922560 3300768 38621792 8% /
selinuxfs 0 0 0 - /sys/fs/selinux
systemd-1 0 0 0 - /proc/sys/fs/binfmt_misc
mqueue 0 0 0 - /dev/mqueue
hugetlbfs 0 0 0 - /dev/hugepages
debugfs 0 0 0 - /sys/kernel/debug
gvfsd-fuse 0 0 0 - /run/user/1000/gvfs
fusectl 0 0 0 - /sys/fs/fuse/connections
/dev/sr0 3798292 3798292 0 100% /mnt
② -hT选项:
[[email protected] /]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sda1 xfs 40G 3.2G 37G 8% /
devtmpfs devtmpfs 2.0G 0 2.0G 0% /dev
tmpfs tmpfs 2.0G 148K 2.0G 1% /dev/shm
tmpfs tmpfs 2.0G 8.9M 2.0G 1% /run
tmpfs tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/sr0 iso9660 3.7G 3.7G 0 100% /mnt
③ -ihT选项:
[[email protected] /]# df -ihT
文件系统 类型 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sda1 xfs 40M 109K 40M 1% /
devtmpfs devtmpfs 491K 326 490K 1% /dev
tmpfs tmpfs 493K 8 493K 1% /dev/shm
tmpfs tmpfs 493K 454 492K 1% /run
tmpfs tmpfs 493K 13 493K 1% /sys/fs/cgroup
/dev/sr0 iso9660 0 0 0 - /mnt