5.2.1 磁盘系统
最初级的文件系统就是“光溜溜”无任何“有用信息的”刚刚被格式化的磁盘。由于更多的读者没有实际的开发平台,也只好来玩个虚的。下面将详细介绍如何构建一个光溜溜的初级文件系统。
baishw@debian:~$ mkdir eproject baishw@debian:~$ cd eproject/ baishw@debian:~/eproject$ ls baishw@debian:~/eproject$ dd if=/dev/zero of=efs.ext3 bs=1024 count=32K 32768+0 records in 32768+0 records out 33554432 bytes (34 MB) copied, 0.143883 s, 233 MB/s baishw@debian:~/eproject$ ls -al total 32812 drwxr-xr-x 2 baishw baishw 4096 2010-04-13 23:38 . drwxr-xr-x 11 baishw baishw 4096 2010-04-13 23:36 .. -rw-r--r-- 1 baishw baishw 33554432 2010-04-13 23:38 efs.ext3 baishw@debian:~/eproject$ file efs.ext3 efs.ext3: data baishw@debian:~/eproject$ |
这段代码有两个目的,构建一个开发目录。每一个项目应该具有一个独立的空间,主要是物理空间。现在虽然是学习嵌入式Linux系统的开发,但是,学习过程其实也是一个项目开发过程,参加过项目开发的人恐怕深有体会。通过一个简单的目录创建命令mkdir,一个被命名为eproject的项目名称或目录名称被创建。以后基本所有的工作都会在这个目录里面完成,因此,需要大家注意,不要将其忘记或者删除。
项目空间构造完成之后就是创建需要使用的“磁盘”。磁盘是用来保存数据的存储介质,作用就是存放数据。同样,在操作系统中,文件也是用来存储数据的,虽然文件不一定在磁盘上(可以在内存、光盘、或其它介质上),但是这并不重要。问题是如果没有多余的物理磁盘,文件可以作为虚拟磁盘吗?答案是肯定的,这就是上面执行的另一个结果:构建一个虚拟原始磁盘,一个没有任何数据的光溜溜的磁盘。有些读者可能不喜欢这个很俗气的“光溜溜”,但是我喜欢,感觉形容的很真实。通过file指令可以查看新的磁盘的属性,只是一个数据文件。为了将这种特殊文件与普通数据文件区分,这种文件称为loop device。关于loop device概念,下面内容会讲到。
dd命令: dd命令可以用来拷贝和转化文件,它是GNU项目中coreutils中的一个工具。dd命令可以完成数据的顺序拷贝,例如ghost工具就是基于dd的。 file命令: file命令用来决定文件的类型。file命令是很强大的命令,可以用来检验文件的属性,包含压缩文件,可执行文件,动态库文件,甚至设备,目录等。希望你牢记这个命令,它会经常被使用。 例如用来判断一个设备文件: /dev/sda: block special |
现在磁盘已经被创建,接下来就是构建初级文件系统了,也就是磁盘的格式化操作。针对磁盘文件,可以采用格式化工具,安装传统的格式化操作过程进行就可以,在文章中,ext3被选作目的文件系统。
baishw@debian:~/eproject$ sudo mkfs.ext3 efs.ext3 [sudo] password for baishw: mke2fs 1.41.3 (12-Oct-2008) efs.ext3 is not a block special device. Proceed anyway? (y,n) y Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) 8192 inodes, 32768 blocks 1638 blocks (5.00%) reserved for the super user First data block=1 Maximum filesystem blocks=33554432 4 block groups 8192 blocks per group, 8192 fragments per group 2048 inodes per group Superblock backups stored on blocks: 8193, 24577
Writing inode tables: done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 21 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. baishw@debian:~/eproject$ file efs.ext3 efs.ext3: Linux rev 1.0 ext3 filesystem data, UUID=cc8133db-8667-478c-ae2e-a305025f9489 baishw@debian:~/eproject$ |
在上面的执行过程中,需要注意磁盘的格式化操作需要以root用户权限才可以执行。为此采用了sudo命令将用户权限切换为root用户。当然读者也可以直接通过su命令切换到root,然后再执行mkfs.ext3指令。有些操作者忘记了自己是root还是普通用户,可以使用whoami命令或者是id命令。mkfs.ext3命令是用来格式化磁盘,以ext3的文件格式保存数据。Ext3是什么呢?由于大多数的读者熟悉WINDOWS,从而对FAT32,FAT16或NTFS不是很陌生,那么ext3就是和这些文件系统功能一样,只是管理方式不一样的文件系统。mkfs.ext3会根据ext3创建文件系统,也就是开始布置磁盘上的数据结构,可以从上面的执行结果中看到磁盘的一些属性信息。注意,由于不是传统的磁盘设备,它会咨询是否继续操作,你输入“y”就可以了。
当磁盘格式化完成之后,再一次使用file命令,这时候文件的属性就彻底变化了,不仅指明了文件系统的类型,而且还具有了UUID。
sudo命令:
su命令:
whoami命令:
id命令:
mkfs.ext3命令:
|
磁盘已经被格式化,现在开始检验新的磁盘。最简单的简单方式就是访问,通过读写等操作检验文件系统是否工作。接下来将详细查看检验过程。
debian:/home/baishw/eproject# mkdir efs debian:/home/baishw/eproject# ls efs debian:/home/baishw/eproject# sudo mount efs.ext3 -t ext3 efs -o loop debian:/home/baishw/eproject# ls efs lost+found debian:/home/baishw/eproject# touch efs/hello.txt debian:/home/baishw/eproject# ls efs hello.txt lost+found debian:/home/baishw/eproject# sudo umount efs debian:/home/baishw/eproject# ls efs debian:/home/baishw/eproject# |
首先是为新的文件系统创建一个挂载点,就是访问磁盘的入口efs。通过ls命令查看挂载点下面的内容,显然是空的,没有任何信息,因为现在efs就是一个普通的空目录文件。接下来有趣的事情发生了,就是通过mount指令将磁盘文件挂载的efs上。当然,mount命令的执行也需要root权限,所以还是sudo操作。在mount命令使用过程中,-t是用来指明磁盘文件系统是ext3类型。-o说明这是一个loop设备,也就是一个伪存储设备。然后,在适用ls的时候,发现一个新的目录在efs目录里面出现了。从而表明通过efs已经成功的访问到磁盘文件的内部。接下来使用touch命令创建一个普通文件hello.txt,然后用ls命令检查它的存在,它确实在efs目录的下面。接下来就是通过umount命令卸载这个磁盘文件系统,当再一次检验efs的时候,efs下面什么都没有了,又恢复了原样。因为umount解除了efs挂载接口的功能。现在,一个新的磁盘产生了,可以挂载,卸载,读写文件等操作。
mount命令:
umount命令:
touch命令:
|