《Ubuntu Linux 从入门到精通》——第6章 磁盘管理 6.1磁盘管理基础

简介: 主分区最多可以有3个,而扩展分区最多只能规划为1个,其实扩展分区并不能直接使用,它还需要被划分为若干个逻辑分区(Logic),逻辑分区的个数最多可以存在12个。因此,一张硬盘可划分为15个分区,即15个挂载点。表6-1解释了不同类型挂载点的功能。

本节书摘来自异步社区《Ubuntu Linux 从入门到精通》一书中的第6章,第6.1节,作者:陶松 , 刘雍 , 韩海玲 , 周洪林著,更多章节内容可以访问云栖社区“异步社区”公众号查看

第6章 磁盘管理

Linux操作系统对磁盘的管理方式与Windows相比,有着显著的区别。Ubuntu作为Linux家族的一员,有着所有Linux系统对磁盘管理的共有特点,也有着自己的独特之处。Ubuntu对磁盘的管理方式和策略方便了计算机用户更有效、更合理、更方便地使用磁盘空间,并且从系统安全的角度出发,Ubuntu比Windows有着更加强健的安全策略。

本章第1节介绍Ubuntu磁盘管理基础知识,包括分区的基本概念,分区的规划方案,磁盘管理的方法等。

第2节介绍在Ubuntu中如何挂载和卸载分区,掌握这一方法,读者可以从本质上形成对Ubuntu及其他Linux操作系统的分区管理的概念。

6.1 磁盘管理基础

Ubuntu有着自己相对独特的磁盘管理体系,这和其他Linux类系统非常相似,与Windows操作系统有较大的区别。本节对比Ubuntu和Windows两种操作系统在管理磁盘设备时的异同,介绍在Ubuntu中规划磁盘分区的方案,讲解在进行磁盘管理的过程中常用的shell命令。

6.1.1 硬盘分区基本知识
对于熟悉Windows操作系统的用户而言,经常会遇到“分区”的概念。然而,在任何“类Linux”操作系统中,如Ubuntu,并没有如同Windows中的“分区”这个概念,它们采用“挂载点”取代“分区”的概念。

“挂载点”的意思就是:把一部分硬盘容量“分”成一个文件夹的形式,用来干一些事情,这个文件夹的名字就叫做“挂载点”。所以,Linux和Windows有着本质上的区别。在任何一个Linux发行版系统里,用户绝对不会看到C盘、D盘、E盘这样的标识符,能看到的只有“文件夹”形式存在的“挂载点”。

本书第4章在讲解文件系统管理时,已经介绍过Ubuntu主要的几个目录,如/、/boot、/home、/root等,其实每个文件夹对应的就是一个挂载点。

在Windows中,同一张硬盘可以被划分为不同的分区。一般人通常都喜欢把硬盘分割成C区和D区,若需要重新安装系统,就会把所有的数据和文件都放在D区,只要把系统C区格式化刪除,再重装系统,数据就不用备份,可以很容易地完成重装且保存数据。在Ubuntu中也是一样,不同的挂载点分别存放着不同的文件,这对于系统的安全和可维护性都有好处。

硬盘在记录所谓“分区”的情况时,会在主扇区创建一张硬盘分区表,这一点Ubuntu和Windows是相同的。分区的类型实质上有两种:一个是主分区(Primary),另一个是扩展分区(Extend)。

主分区最多可以有3个,而扩展分区最多只能规划为1个,其实扩展分区并不能直接使用,它还需要被划分为若干个逻辑分区(Logic),逻辑分区的个数最多可以存在12个。因此,一张硬盘可划分为15个分区,即15个挂载点。表6-1解释了不同类型挂载点的功能。
screenshot

通过查看配置文件/etc/fstab,可以详细了解Ubuntu中硬盘分区的情况及别名,如下所示:

root@jacky-desktop:~# cat /etc/fstab
# /etc/fstab: static file system information.
#
# <file system> <mount point>  <type> <options>    <dump> <pass>
proc         /proc       proc  defaults    0    0
# /dev/sda1
UUID=da0ad461-4b12518ab1bb9  / ext3 relatime,errors=remount-ro 0  1
# /dev/sda5
UUID=6fec-d4b7-b67e-673152afe115 none     swap  sw       0    0
/dev/scd0    /media/cdrom0  udf,iso9660 user,noauto,exec,utf8 0    0
/dev/fd0    /media/floppy0 auto  rw,user,noauto,exec,utf8 0    0
/root/swapfile none  swap  sw   default  0  0

由于本书使用的Ubuntu是运行于虚拟机中的,因此看到的该文件信息与直接将Ubuntu安装在硬盘上的用户不同。但无论如何,其表示方法是类似的,都是以/dev/文件夹下的一个文件夹表示一个分区。

使用虚拟机安装的用户,根据本书第1章的方法安装后,看到的/etc/fstab文件信息如上所示。这里并没有实际的硬盘,而主分区或称为主挂载点的别名是/dev/sda1,即“/”挂载点。文件信息中的/dev/sda5表示逻辑分区,此处有两个虚拟的设备,一个是/dev/scd0,表示光驱;另一个是/dev/fd0,表示软驱。SWAP交换分区被挂载至/root/swapfile。

直接将Ubuntu安装在硬盘上的用户,可以看到硬盘分区的别名格式如下所示:

/dev/hda1
/dev/hda2
/dev/hda3
/dev/hda4
/dev/hda5
/dev/sdb1

其中,/dev/后面的部分表示一个具体的分区,hd表示IDE硬盘,sd表示SATA硬盘或者其他的外部设备,had中的第3位字母a表示这是该类型接口上的第1个设备。每一个IDE接口可以允许有两个设备,一个为主设备,另一个为从设备,可以分别用hda、hdb表示第1个IDE接口上的两个设备。

/dev/hda1~/dev/hda4都表示主分区,/dev/hda5表示该硬盘上的第1个逻辑分区。在Ubuntu中为了避免出现不必要的混乱,分区的顺序是不能随意改变的,分区的别名或标识由它们在硬盘中的位置决定。

6.1.2 磁盘分区规划方案
根据机器的不同使用领域,或要完成不同的主要任务,在规划磁盘空间的时候可以有多种方案。本小节对几种常用类型作一个推荐方案,读者可以根据自己的实际需要参考配置。

在介绍方案前,以IDE硬盘空间为80GB、内存为512MB的机器为例,读者根据自己电脑的硬件配置情况,按比例增减即可。以下介绍入门级、进阶使用、服务器常用的硬盘空间分区规划方案,这些都只是推荐方案,也就是目前用得比较多的配置方案,读者可以根据自己的需求来决定。

表6-2为入门级系统对硬盘分区规划的方案,表6-3为进阶级系统对硬盘分区规划的方案,表6-4为服务器系统对硬盘分区规划的方案。
screenshot
screenshot

6.1.3 磁盘管理方法
本小节讲解与磁盘管理相关的一系列shell命令的使用方法,其中有些命令是可以用在安装Ubuntu时进行分区控制和格式化分区的。

1.磁盘分区命令fdisk
用于硬盘分区,它采用传统的问答式界面。

语法:fdisk [参数]。

主要参数。

-b<分区大小>:指定每个分区的大小。

-l:列出指定的外围设备的分区表状况。

-s<分区编号>:将指定的分区大小输出到标准输出上,单位为区块。

-u:搭配“-l”参数列表,会用分区数目取代柱面数目,来表示每个分区的起始地址。

在安装Ubuntu时,可以用该命令对硬盘进行分区,如下所示:

root@jacky-desktop:~# fdisk /dev/hda    //对IDE硬盘进行分区
root@jacky-desktop:~# fdisk /dev/sdb    //对SCSI硬盘进行分区

在进行分区时,常用的子命令如下。

p:显示现有分区。

n:建立分区。

t:更改分区类型。

d:删除分区。

a:更改分区启动标志。

w:对分区的更改写入硬盘并退出。

q:不保存更改退出。

此外,该命令还常常用于列出磁盘分区信息,如下所示:

root@jacky-desktop:~# fdisk –l         //列出当前操作系统的磁盘分区信息

Disk /dev/sda: 8589 MB, 8589934592 bytes   //主分区大小为8589MB
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000b8bf5

  Device Boot   Start     End   Blocks  Id System
/dev/sda1  *      1     993   7976241  83 Linux
/dev/sda2       994    1044   409657+  5 Extended
/dev/sda5       994    1044   409626  82 Linux swap / Solaris

对于不同的机器,使用该命令看到的信息不一致。以笔者的机器为例,当前的主设备是/dev/sda,大小为8589MB,共有3个分区:sda1、sda2、sda5。

2.建立文件系统命令mkfs
该命令类似于Windows中的format,也就是针对某一分区,在它上面创建一个新的文件系统,或者可以看作是将该分区的文件系统格式化为指定的格式。在安装Ubuntu时,常常用在fdisk命令之后。在使用Ubuntu的过程中,如果要改变某一分区的文件系统格式,就必须先做好目标分区的文件的备份工作,再使用该命令。

语法:mkfs [参数] [-t 文件系统类型] [分区名称]。

主要参数。

fs:指定建立文件系统时的参数。

-V:显示版本信息和简要的使用方法,主要用于测试。

-v:显示版本信息和详细的使用方法。

如下所示:

root@jacky-desktop:~# mkfs –v          //显示命令使用方法
Usage: mkfs.ext2 [-c|-l filename] [-b block-size] [-f fragment-size]
     [-i bytes-per-inode] [-I inode-size] [-J journal-options]
     [-N number-of-inodes] [-m reserved-blocks-percentage] [-o creator-os]
     [-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]
     [-O feature[,...]] [-r fs-revision] [-E extended-option[,...]]
     [-T fs-type] [-jnqvFSV] device [blocks-count]

root@jacky-desktop:~# mkfs –V          //显示版本信息
mkfs (util-linux-ng )

root@jacky-desktop:~# mkfs -t ext3 /dev/sda3  //将/dev/sda3的文件系统建立为ext3类型

3.设置交换分区命令mkswap
语法:mkswap [参数] [设备或分区名称] [交换分区大小]。

主要参数。

-c:在建立交换分区前,检查块设备是否有损坏,如果有,将打印出来。

-f:在SPARC机器上建立交换分区时使用。

-v0:建立旧式的交换分区。

-v1:建立新式的交换分区。

[交换分区大小]的单位是1KB字节,即1024字节。

如下所示:

root@jacky-desktop:~# mkswap -c -v1 /dev/sda5 102400    //在/dev/sda5建立大小为100MB的交换分区,建立前先检查是否有损坏的区块

4.显示磁盘信息命令df
语法:df [参数] [设备或区块]。

主要参数。

-a:包含全部的文件系统。

--block-size=<区块大小>:以指定的区块大小来显示区块数目。

-h:以可读性较高的方式来显示信息。

-H:与-h参数相同,但在计算时是以1000 Bytes为换算单位,而非1024 Bytes。

-i:显示inode的信息。

-k:指定区块大小为1024字节。

-l:仅显示本地端的文件系统。

-m:指定区块大小为1048576字节。

-P:使用POSIX的输出格式。

-t <文件系统类型>:仅显示指定文件系统类型的磁盘信息。

-T:显示文件系统的类型。

-x <文件系统类型>:不要显示指定文件系统类型的磁盘信息。

--help 显示帮助。

如下所示:

root@jacky-desktop:~# df –a      //显示所有的磁盘信息
文件系统    1K-块     已用   可用 已用% 挂载点
/dev/sda1    7913216  2519676  4994728 34% /
proc           0     0     0  - /proc
/sys           0     0     0  - /sys
varrun       257788    108   257680  1% /var/run
varlock      257788     0   257788  0% /var/lock
udev        257788    44   257744  1% /dev
devshm       257788    12   257776  1% /dev/shm
devpts          0     0     0  - /dev/pts
lrm         257788   38684  219104 16% /lib/modules/-19-generic/volatile
securityfs          0     0     0  - /sys/kernel/security
gvfs-fuse-daemon       0     0     0  - /home/jacky/.gvfs
root@jacky-desktop:~# df –l        //仅显示本地的文件系统信息
文件系统    1K-块    已用   可用 已用% 挂载点
/dev/sda1     7913216  2519676  4994728 34% /
varrun       257788    108  257680  1% /var/run
varlock       257788     0  257788  0% /var/lock
udev        257788    44  257744  1% /dev
devshm       257788    12  257776  1% /dev/shm
lrm         257788   38684  219104 16% /lib/modules/-19-generic/volatile
root@jacky-desktop:~# df –i    //显示索引结点信息
文件系统      Inode (I)已用 (I)可用 (I)已用% 挂载点
/dev/sda1     499712 113866 385846  23% /
varrun       64447    59  64388  1% /var/run
varlock       64447    1  64446  1% /var/lock
udev        64447   2819  61628  5% /dev
devshm       64447    2  64445  1% /dev/shm
lrm         64447    19  64428  1% /lib/modules/-19-generic/volatile
root@jacky-desktop:~# df -t ext3      //显示系统中ext3类型的分区信息
文件系统    1K-块     已用    可用 已用% 挂载点
/dev/sda1    7913216  2519676  4994728 34% /

5.显示目录的容量du
语法:du [参数] [目标目录]。

主要参数。

-a:显示目录中所有文件的大小。

-b:显示目录或文件大小时,以Byte为单位。

-c:除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。

-D:显示指定符号连接的源文件大小。

-h:以K、M、G为单位,提高信息的可读性。

-H:与-h参数相同,但是K、M、G是以1000为换算单位。

-k:以1024字节为单位。

-l:重复计算硬件连接的文件。

-L:显示选项中所指定符号连接的源文件大小。

-m:以1MB为单位。

-s:仅显示总计。

-S:显示个别目录的大小时,并不包含其子目录的大小。

-x:以一开始处理时的文件系统为准,若遇上其他不同的文件系统目录则略过。

-X:在<文件>指定目录或文件。

如下所示:

root@jacky-desktop:~# du -a /root      //显示/root目录下每个文件的大小,以K为单位
4.0K  /root/.recently-used.xbel
0    /root/.gconfd/saved_state
4.0K  /root/.gconfd
4.0K  /root/.gconf
8.0K  /root/.bash_history
4.0K  /root/.mozilla
4.0K  /root/a.c
4.0K  /root/.chewing/uhash.dat
8.0K  /root/.chewing
8.0K  /root/.viminfo
4.0K  /root/b.c
4.0K  /root/.synaptic/synaptic.conf
0    /root/.synaptic/lock.non-interactive
4.0K  /root/.synaptic/log/.230901.log
4.0K  /root/.synaptic/log/.030414.log
4.0K  /root/.synaptic/log/.011620.log
16K   /root/.synaptic/log
0    /root/.synaptic/lock
0    /root/.synaptic/options
24K   /root/.synaptic
4.0K  /root/.wapi
4.0K  /root/.profile
4.0K  /root/.rnd
4.0K  /root/.scim/pinyin/pinyin_phrase_index
0    /root/.scim/pinyin/pinyin_phrase_lib
204K  /root/.scim/pinyin/pinyin_table
0    /root/.scim/pinyin/phrase_lib
212K  /root/.scim/pinyin
4.0K  /root/.scim/sys-tables
220K  /root/.scim
4.0K  /root/.dbus/session-bus/a980aa904e30fe8d-0
8.0K  /root/.dbus/session-bus
12K   /root/.dbus
4.0K  /root/.bashrc
4.0K  /root/.gnome2_private
4.0K  /root/.gnome2/accels
4.0K  /root/.gnome2/yelp
4.0K  /root/.gnome2/network-admin-locations
16K   /root/.gnome2
344K  /root  

root@jacky-desktop:~# du -s /root    //仅仅显示/root目录的总大小
344   /root
相关文章
|
28天前
|
Linux Shell C语言
【Shell 命令集合 磁盘维护 】Linux 分区管理的工具 sfdisk命令使用教程
【Shell 命令集合 磁盘维护 】Linux 分区管理的工具 sfdisk命令使用教程
29 1
|
28天前
|
存储 Shell Linux
【Shell 命令集合 磁盘维护 】Linux 管理硬盘分区 mpartition命令使用教程
【Shell 命令集合 磁盘维护 】Linux 管理硬盘分区 mpartition命令使用教程
36 1
|
28天前
|
存储 Shell Linux
【Shell 命令集合 磁盘维护 】Linux mkfs.ext2 命令使用教程
【Shell 命令集合 磁盘维护 】Linux mkfs.ext2 命令使用教程
37 1
|
28天前
|
Shell Linux API
【Shell 命令集合 磁盘维护 】Linux 查找指定目录下的所有符号链接文件 symlinks 命令使用教程
【Shell 命令集合 磁盘维护 】Linux 查找指定目录下的所有符号链接文件 symlinks 命令使用教程
31 1
|
28天前
|
Shell Linux C语言
【Shell 命令集合 磁盘维护 】Linux 创建一个初始化内存盘 mkinitrd命令使用教程
【Shell 命令集合 磁盘维护 】Linux 创建一个初始化内存盘 mkinitrd命令使用教程
33 0
|
28天前
|
存储 Shell Linux
【Shell 命令集合 磁盘维护 】Linux 创建Minix文件系统 mkfs.minix 命令使用教程
【Shell 命令集合 磁盘维护 】Linux 创建Minix文件系统 mkfs.minix 命令使用教程
33 0
|
28天前
|
存储 Shell Linux
【Shell 命令集合 磁盘维护 】Linux 建立ext2文件系统 mke2fs命令使用教程
【Shell 命令集合 磁盘维护 】Linux 建立ext2文件系统 mke2fs命令使用教程
30 2
|
28天前
|
监控 Linux Shell
【Shell 命令集合 磁盘维护 】Linux 交换分区的特殊文件或设备 swapon命令使用指南
【Shell 命令集合 磁盘维护 】Linux 交换分区的特殊文件或设备 swapon命令使用指南
38 1
|
28天前
|
存储 Shell Linux
【Shell 命令集合 磁盘维护 】Linux 创建一个用作交换空间(swap space)的特殊文件或设备 mkswap命令使用教程
【Shell 命令集合 磁盘维护 】Linux 创建一个用作交换空间(swap space)的特殊文件或设备 mkswap命令使用教程
33 0
|
28天前
|
存储 Linux Shell
【Shell 命令集合 磁盘维护 】Linux 创建MS-DOS文件系统 mkfs.msdos命令使用教程
【Shell 命令集合 磁盘维护 】Linux 创建MS-DOS文件系统 mkfs.msdos命令使用教程
27 0