一、磁盘设备
linux允许通过/dev/目录下的设备节点对磁盘进行直接或低级访问。
设备节点 | 设备 |
---|---|
/dev/fd0 | flopyy disk 软驱已经淘汰 |
/dev/hd[a-d] | IDE接口的磁盘 已经淘汰 |
/dev/sd[a-z] | SCSI Disks 目前我们使用的磁盘,U盘都用sd[a-z]表示 |
/dev/cdrom | 光驱链接 |
对于已经淘汰的东西,我们做为了解,老陌在本地主机上没有发现/dev/cdrom这个设备节点,因为老陌没有光驱。但老陌在虚拟机里测试一下,有这个设备。 老陌在虚拟机安装了centos系统(因为很小,不用图形界面):
[root@localhost ~]# ls -l /dev/cdrom
lrwxrwxrwx. 1 root root 3 Jul 17 11:35 /dev/cdrom -> sr0
发现cdrom是一个软链接文件,链接到节点sr0。
/dev/sda表示第一块硬盘,/dev/sdb表示第二块硬盘,对于分区则在后面加上分区编号。
老陌在虚拟机中添加一块8G硬盘用于测试:
测试信息如下:
/dev/sdb 表示第二块硬盘
/dev/sdb1 表示第一个分区
/dev/sdb2 表示第二个分区
/dev/sdb5 表示第一个逻辑分区
/dev/sdb6 表示第二个逻辑分区
为啥没有sdb3呢?这和分区类型有关。MBR类型分区由主分区+扩展分区+逻辑分区组成。由于主分区最多支持4个,所以逻辑分区从5开始编号。
老陌以GPT类型分区进行测试:
发现按:1-n的顺序显示的。GPT分区和MBR不同,它支持大硬盘,支持更多分区。
二、对设备进行低级访问
分区之后老陌没有对分区进行文件系统的创建(格式化)。此时分区相当于一片空地,还没有进行规划呢。老陌把/etc/os-release文件写到这个分区上,注意是低级写入。
cat /etc/os-release > /dev/sdb2
之后用低级的方式读取一下分区:
lesss -f /dev/sdb2
less -f表示强制读取,我们会发现刚才写入的数据已经读出来了,最后一行是磁盘原始状态,less会一直读下去,但当前页满了暂停,可以按q键退出。通过测试发现低级访问很容易,但没有文件系统,因此无法创建文件,目录之类的高级东东。
老陌此时突发奇想,可不可以把live镜像通过低级的方式写到硬盘里呢? 首先老陌把 deepin-live-system-2.0-amd64.iso 通过深度终端的上传功能,传到虚拟机 centos 系统中,之后把镜像写到/dev/sdb中。
cat ./deepin-live-system-2.0-amd64 > /dev/sdb
注意不是写到分区,是写整个磁盘设备, 很疯狂3-4秒完事了,我重启按f12键,选择从disk2启动,果然成功了!
实际上可以用这个方法制作usb启动盘,把u盘插上,按上面的方式把live镜像直接写到u盘设备上,之后就可以用它来开机了!昨天老陌用dd命令把镜像写到U盘上,之后进行系统还原,方法是一样的。
三、文件系统
磁盘低级访问就是把数据按字节流的方式存放到磁盘中。老陌感觉有些像磁带,不知道小白们见过没有,磁带是那个年代流行音乐的载体。
这种低级的方式很不好用,我们希望按文件的方式组织管理,并控制对其访问的权限,这就要用到文件系统了。 文件系统将磁盘划分成规定大小的块进行管理,这块存放inode,那块存放dentry,这三块和那一块存放/etc/os-release数据等。文件系统可以用来存放这些信息,但使用时必须经过初始化,在Linux中叫创建文件系统,在其他系统中可能叫格式化。
Linux支持很多文件系统,比如:ext4,fat,xfs等。在linux中有mkfs开头的命令,用于创建文件系统:
[linux@ccloves sbin]$ ls /sbin/mkf*
/sbin/mkfs /sbin/mkfs.ext2 /sbin/mkfs.jfs /sbin/mkfs.ntfs
/sbin/mkfs.bfs /sbin/mkfs.ext3 /sbin/mkfs.minix /sbin/mkfs.reiserfs
/sbin/mkfs.cramfs /sbin/mkfs.ext4 /sbin/mkfs.msdos /sbin/mkfs.vfat
/sbin/mkfs.exfat /sbin/mkfs.fat /sbin/mkfs.nilfs2 /sbin/mkfs.xfs
下面我们创建ext4格式的文件系统。老陌在虚拟机里实验,之前已经分好区了:/dev/sdb1, /dev/sdb2,我们对/dev/sdb1创建ext4文件系统:
[root@localhost ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
……
从windows过来的小白,可以理解这是在对/dev/sdb1这个分区进行格式化。
四、挂载文件系统
在linux中没有C:,D:之说,linux会把不同的分区映射到一个目录中,我们称为文件系统挂载。
(一) 查看挂载点
[linux@ccloves ~]$ mount
……
/dev/sdb1 on / type ext4 (rw,relatime,data=ordered)
/dev/sdb6 on /home type ext4 (rw,relatime,data=ordered)
/dev/sda6 on /mnt/linux type ext4 (rw,relatime,data=ordered)
/dev/sda5 on /mnt/wind type fuseblk (rw,relatime,user_id=0,group_id=0,allow_other,blksize=4096)
/dev/sda1 on /mnt/winc type fuseblk (rw,relatime,user_id=0,group_id=0,allow_other,blksize=4096)
用不带参数的mount可以查看挂载点。
/dev/sdb1 on / type ext4 (rw,relatime,data=ordered)
/dev/sdb1是被挂载的设备(分区), 挂载的目录是 /,文件系统类型是 ext4, 后面跟上其它选项。如果你动手操作,你会发现除了我们熟悉的还有一些不熟悉的挂载目录,他们是内核虚拟的,并不是任何物理设备。
(二)查看分区空间使用状态
我们要了解哪个分区剩余多少空间,每个分区多大,可以用df命令。
[linux@ccloves ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 3.4G 0 3.4G 0% /dev
tmpfs 692M 1.6M 690M 1% /run
/dev/sdb1 30G 12G 17G 42% /
/dev/sdb6 73G 2.2G 67G 4% /home
/dev/sda6 523G 36G 460G 8% /mnt/linux
/dev/sda5 200G 16G 185G 8% /mnt/wind
/dev/sda1 201G 13G 188G 7% /mnt/winc
……
通过命令: df -h 可以看出:
/dev/sdb1分区: 大小是30G, 用了12G, 还剩下17G, 已经使用空间的百分比是42%, 最后显示了挂载点。在这里我们可以了解哪个分区挂载到哪个目录上了,还能了解分区空间的情况,此命令很有用。
注意:-h参数表示以适当的单位显示空间大小,比如:30G,看起来很人性化。
(三)临时挂载 /media目录
一些设备比如u盘,光驱等在使用之前也需要挂载到目录中, 他们用哪个目录作为挂载点呢? 通用的做法是挂载到/media目录中,当然你的地盘你做主,你想放哪儿都行。老陌在用深度系统时发现有些应用对/media和其它系统目录的权限是不同的,对挂载到/media下有权限访问,而对挂载到其它目录则无法访问。
这就是说 /media 这个目录用于临时挂载区是一个标准。 老陌在虚拟机尝试挂载一下cdrom看看:
为了遵守这个规则,老陌先在/media下创建cdrom目录,之后用mount进行挂载,挂载成功之后查看到了光盘的内容。
老陌在本地主机中插上U盘,系统自动挂载U盘到/media目录中:
/dev/sdc1 15G 3.0G 12G 21% /media/linux/DEEPINOS
(四)挂载的相关问题:
- 默认情况下只有管理员才能够挂载和卸载设备。
- 只有未被使用的文件系统才能被卸载。比如:打开文件系统中的文件,或当前的工作目录正处在文件系统中,此时无法卸载。
- 在图形环境下有些系统会自动挂载。
- 当向U盘复制数据时,似乎很快完成,但卸载时很慢。这是因为linux为了提高性能,这些数据被内核缓冲了,即数据在内存中并未全部写到u盘,所以只有全部写到U盘之后才会卸载。