当Windows系统出现问题的时候,可能需要重装系统,这个时候我们往往会使用系统盘将系统重新安装在C盘上,其他盘上的文件都没有受到重装系统的影 响,这就是分区的好处之一。同样,在Linux中也需要分区,但是Linux中对于分区的表示方式与Windows并不一样。下面将以我的电脑为例,讲述 Liunx的分区方法并且通过讲述Linux的启动过程来了解Linux系统和挂载。(本文章适合初学Linux的同学学习)

1.基本概念

1.1.分区的概念

分区从实质上说就是对硬盘的一种格式化。当我们创建分区时,就已经设置好了硬盘的各项物理参数,指定了硬盘主引导记录和引导记录备份的存放位置。而对于文 件系统以及其他操作系统管理硬盘所需要的信息则是通过之后的高级格式化。安装操作系统和软件之前,首先需要对硬盘进行分区和格式化,然后才能使用硬盘保存 各种信息。各个分区之间是相对独立的,你在一个分区上的操作不会影响到另一个分区。

之前我们都会认为C盘就是第一分区,D盘就是第二分区。其实这种看法是不恰当的,C盘,D盘等都是盘符号,是Windows赋予的名称。在没有启动 Windows之前,它们就是一个个分区,而不是具体的盘符。这种盘符的概念,是Windows“内在”的,也就是说就算是硬盘上没有安装Windows 系统,硬盘上的分区还是存在的。所以可以这样说:盘符-是软件级的概念;分区-是硬件级的概念。

1.2.Linux文件系统的组织方式

Linux文件系统的组织方式称做文件系统分层标准,即采用层次式的树状目录结构。在此结构的最上层是根目录“/”,然后在此根目录下是其他的目录和子目 录。Linux和Windows一样,采用“路径”来表示文件或目录在文件系统中所处的层次。路径由以“/”为分隔符的多个目录名字符串组成,分成绝对路 径和相对路径。Linux中所谓绝对路径是指由根目录“/”为起点来表示系统中的某个文件或者目录的位置的方法;相对路径则是以当前目录为起点,表示系统 中某个文件或者目录在文件系统中的位置的方法。例如(以我电脑为例):在终端输入pwd(Linux中的显示当前所在位置的命令),终端显示了
“/home/csc”,这就是绝对路径。假如csc文件夹下有一个test文件夹,在终端输入"cdtest"(或者cd./test),test或 者./test就是相对于csc文件夹的相对路径,其中“./”表示当前目录,通常可以省略。下面介绍一下Linux中部分目录及其功能说明(以便后面讲 述Linux分区和启动过程)

/:Linux文件系统的最上层目录,其他所有目录均是该目录的子目录

/bin:Binary的缩写,存放用户的可执行程序,例如cp和mv等;也存放Shell,如bash和csh。不应把该目录放到一个单独的分区中,否则LinuxRescue模式无法使用这些命令。

/boot:内核就放在这里;操作系统启动时所需的文件,包括vmlinuz和initrd.img等,这些文件若损坏常会导致系统无法正常启动,因此最好不要做任意改动

/dev:设备文件目录,例如/dev/sda表示第一块SCSI设备,/dev/hda表示第一块IDE设备(后面会讲到Linux中对SCSI和IDE接口硬盘的表示方法)

/home:普通用户的主目录或FTP站点目录,一般存放在/home目录下。(想要了解Linux中其他默认目录中的功能,请查看:http://www.xtzj.com/read-htm-tid-69582.html)

1.3.Linux中的挂载点

Windows系统下的分区很明了,一个分区就是一个盘符。如果有可以兼容的文件系统,系统也可以读写那个分区。如果是不兼容的文件系统,Windows就会忽略这个分区。

Linux就是把所有的一切都放到一颗“大树”下。如果你有另外的分区或者硬盘,它们就会“挂载”到枝干的子目录中,例如/media或者/mnt目录,这个子目录就是所谓的挂载点,你可以将分区挂载到任意的目录中。

2.分区的建议

分区关系到一个系统的安全性和健壮性,当系统出现问题的时候,我们应该以最小的改动来完成系统的修复,这样就能减少不必要的损失。

在安装Linux系统时候,我将硬盘分为四个分区:第一个分区挂载在“/”目录下,第二个分区挂载在“/boot”下,第三个分区挂载在“/home”下,第四个分区是交换分区(Swap分区)

理由:

(1)一个根分区。根分区是挂载在“/”目录上的。用来存放系统文件。

(2)“/home”分区:这是用户的home目录所在地;它的大小取决于你的Linux系统有多少用户,以及这些用户将存放多少数据。当你系统受损需要重新安装的时候,不会影响到“/home”分区下的文件。

(3)“/boot”分区:包含了操作系统的内核和在启动系统过程中所要用到的文件。独立挂载/boot的好处是可以让多个Linux共享一个 /boot。“/boot”目录的大小通常都很小,20MB左右。可以根据自己的硬盘空间分配一块给/boot分区,但是不要太大,否则是种浪费。

(4)一个交换(swap)分区。交换分区用来支持虚拟内存。如果你的计算机内存小于16MB,就必须创建交换分区。即使你有更多的内存,仍然推荐使用交 换分区。物理内存小于或等于512MB,建议分配实际物理内存容量2倍大小的swap;物理内存大于512MB,建议分配与物理内存等容量的swap。

3.Linux的启动过程(以我的电脑为例)

系统的启动是从读取grub.cfg开始的(grub一个来自GNU项目的多操作系统启动程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同 时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数)。 grub.cfg文件的位置是在/boot/grub目录下。(如果电脑上安装的是双系统的话,也可以通过修改grub文件,来改变系统的启动顺序,等待 时间等。)将文件打开后文件中有这么一段:

menuentry'Ubuntu,Linux2.6.32-33-generic' --class ubuntu --class gnu-linux --class gnu--class os {

recordfail

insmodext2

setroot='(hd0,8)'

search--no-floppy --fs-uuid --set 089b3e37-bf9b-4811-94f8-b2f73fc313f6

linux /vmlinuz-2.6.32-33-genericroot=UUID=abdb3fa2-45cd-447d-8cc5-83cf326195bd ro quiet splash

initrd /initrd.img-2.6.32-33-generic

}

这是一个标准的ubuntu引导菜单,menuentry那一行显示了该项目的名称,insmod是Linux下的指令,是加载模块的意思。这里涉及到了分区的命名,下面就来了解一下:

Linux系统中存储设备的两种表示方法

(1)对于IDE接口的硬盘的两种表示方法

IDE接口中的整块硬盘在Linux系统中表示为/dev/hd[a-z],比如/dev/hda,/dev/hdb... ... 以此类推。另一种表示方法是hd[0-n],其中n是一个正整数,比如hd0,hd1,hd2... hdn ;如果机器中只有一块硬盘,无论(fdisk-l命令可查看硬盘及硬盘上的分区情况)列出的是/dev/hda还是/dev/hdb,都是hd0;如果机 器中存在两个或两个以上的硬盘,第一个硬盘/dev/hda另一种方法表示为hd0,第二个硬盘/dev/hdb,另一种表示是hd1。

(2)IDE接口硬盘分区的两种表示方法

硬盘分区的第一种表示方法/dev/hd[a-z]X,X是一个从1开始的正整数;比如/dev/hda1,/dev/hda2.....,如果X的值是1到4,表示硬盘的主分区(包含扩展分区);逻辑分区从是从5开始的,比如/dev/hda5肯定是逻辑分区。

硬盘分区的第二种表示方法(hd[0-n],y),前面已经说过了整块硬盘也有两种表示方法,一种是/dev/hd[a-z]的,另一种方法是hd[0- n];一个硬盘分区首先要确认在哪个硬盘,然后再确认它所在的位置;所以我们要知道一个硬盘分区,除了知道/dev/hd[a-z]以外,还要知道他在哪 个位置,确认了分区在/dev/hd[a-z]后,还要通过X来确认具体位置;y的值是/dev/hd[a-z]X中的X-1。

(3)关于SATA和SCSI接口的硬盘的两种表示方法

方法和IDE接口的硬盘相同,只是把hd换成sd。

下面通过实例来认识一下:在终端下输入fdisk-l命令(要在超级用户下查看):

Disk/dev/sda: 500.1 GB, 500107862016 bytes

255heads, 63 sectors/track, 60801 cylinders

Units= cylinders of 16065 * 512 = 8225280 bytes

Sectorsize (logical/physical): 512 bytes / 512 bytes

I/Osize (minimum/optimal): 512 bytes / 512 bytes

Diskidentifier: 0x48000000

DeviceBoot Start End Blocks Id System

/dev/sda1 * 1 13054 104856223+ 7 HPFS/NTFS

/dev/sda2 13055 60802 383529250+ f W95 Ext'd (LBA)

/dev/sda5 13055 32635 157284351 7 HPFS/NTFS

/dev/sda6 32636 52216 157284351 7 HPFS/NTFS

/dev/sda7 55329 55578 1998848 82 Linux swap / Solaris

/dev/sda8 55578 55640 498688 83 Linux

/dev/sda9 55640 60802 41459712 83 Linux

/dev/sda10 52217 55328 24996864 83 Linux

文件中的第一行:Disk/dev/sda: 500.1 GB, 500107862016 bytes,这个就是表示机器中只有一个硬盘设备/dev/sda,大小为500G;下面的就是硬盘的分区,每个分区都有详细的信息。

讲到这里,我们都会有点奇怪,既然上面说了IDE接口是hd表示,SATA和SCSI接口都是sd表示,那为什么grub文件有一行 “setroot='(hd0,8)'”代码呢?不应该是“sd”吗?通过在网上查找的相关资料,对于grub文件来说,硬盘都是用hd表示的,磁盘号是 从0开始计算的,分区号是则是从1开始计算的(grub2是从1开始计算的,grub1是从0开始计算的),而对于Linux内核来说,IDE硬盘是hd 表示的,SATA硬盘是用sd表示的,磁盘序号从a开始计算的,分区号是从1开始计算的。我电脑中的Linux系统是Ubuntu10.04LTS版
本,grub文件是grub2版本。所以grub文件中的(hd0,8)代表的是第一块硬盘上的第八个分区即sda8。

继续讲解上面的grub.cfg文件,search指令是寻找内核的意思,这就真正进入了Linux系统的引导过程,内核的存放位置是在/boot目录 下。下面一行中的linux是一个指令,它告诉grub程序使用后面给出的内核,于是这个名为“vmlinuz-2.6.32-33-generic”的 内核就被载入内存,并读取“root=UUID=abdb3fa2-45cd-447d-8cc5-83cf326195bd”这个分区的一些必要的文 件。上段代码中的最后一行的命令的意思是:用名为“/initrd.img-2.6.32-33-generic”的文件先在内存中构造一个“虚拟”的根
文件系统,以便于内核检测完硬件信息后载入必需的模块等等。grub的工作到此结束,下面将由Linux内核接管电脑的控制权,开始初始化阶段。到目前为 止还没有挂载根分区。然后Linux系统会读取一个名为fstab的文件,并按照其中的指令逐行的执行,下面来看一下fstab文件(/etc /fstab)。以下是我的电脑中的fstab文件:

#/etc/fstab: static file system information.

#

#Use 'blkid -o value -s UUID' to print the universally uniqueidentifier

#for a device; this may be used with UUID= as a more robust way toname

#devices that works even if disks are added and removed. See fstab(5).

#

#<file system> <mount point> <type> <options> <dump> <pass>

proc /proc proc nodev,noexec,nosuid 0 0

#/ was on /dev/sda10 during installation

UUID=abdb3fa2-45cd-447d-8cc5-83cf326195bd/ ext4 errors=remount-ro 0 1

#/boot was on /dev/sda8 during installation

UUID=089b3e37-bf9b-4811-94f8-b2f73fc313f6/boot ext4 defaults 0 2

#/home was on /dev/sda9 during installation

UUID=11ec48a8-5ca9-4e39-9bff-fd56b811d58e/home ext4 defaults 0 2

#swap was on /dev/sda7 during installation

UUID=2c80ec4a-769c-40c5-8d87-39a2332661cfnone swap sw 0 0

#号开头的行是注释,是说明性的文字,在执行指令的时候并不会执行它。

linux挂载分区的时候将自上而下,顺序执行。第一个起作用的行是proc,关于proc的介绍请查看http://www.2cto.com/os/201202/119553.html

首先要将sda10挂载到”/”下,这就是linux最先被挂载的根分区;然后继续把sda8挂载到“/boot”,sda9挂载到“/home”下,sda7“挂载”到交换分区,这个交换分区有点特殊,因为他并没有被“附属”于/,而是独立使用的。

到此为止,Linux中系统用到的分区都已经挂载完毕。可以使用系统了。

4.手动挂载分区

有人会问,当我需要使用Windows下的分区时怎么办?能不能在Linux下挂载Windows分区呢?答案是肯定的,如果你使用的是桌面版的 Ubuntu,并且是双系统,那么点击Linux中的“位置”->"计算机",里面就列出了Windows中的分区,点击右键,选择“挂载”就可以 了,默认是挂载在media目录下,我们可以通过命令设定想要挂载的分区及其要挂在到的位置,比如,我想要挂载/dev/sda5分区,其文件系统格式是 NTFS,把它挂载在/home/csc/music目录下。具体命令如下:

mount/dev/sda5 /home/csc/music

cd/home/csc/music

ls

执行上述命令,可以在music目录下查看sda5分区中的文件了。

卸载的命令也很简单,执行命令:umount/dev/sda(或者/home/csc/music)就OK了。

 

参考文献:

细说Linux挂载——mount:http://forum.ubuntu.org.cn/viewtopic.php?t=257333

Linuxproc:http://dqw19880428.blog.163.com/blog/static/2051131620093144735924/

Linux硬盘分区细节详谈: http://blog.csdn.net/freexploit/article/details/961330

Linux分区和挂载(mount命令的学习)的更多相关文章

  1. 借Windows说明Linux分区和挂载点[转]

    在介绍Linux分区和挂载点前,我想先说一个Windows的例子,Windows大家都比较熟,再借这个例子来说明什么是Linux分区和挂载点. 1.消失了的分区 在WinPE下,我将一块硬盘分成一个主 ...

  2. linux 分区与挂载

    流程:分区-格式化-挂载 1.添加硬盘 使用fdisk -l命令查看磁盘状态 此处可以看到两块硬盘sda和sdb,第一块硬盘sda是装好系统的.sdb硬盘是未进行分区的. 本例将这个20G的硬盘分区, ...

  3. linux分区与挂载

    分区是将一个硬盘驱动器分成若干个逻辑驱动器,分区是把硬盘连续的区块当做一个独立的磁盘使用.分区表是一个硬盘分区的索引,分区的信息都会写进分区表.通常情况下,为磁盘分区通常使用fdisk,它是对基于MB ...

  4. Linux编程 8 (挂载mount,查看磁盘df du,搜索grep,压缩zgip,归档tar)

    一. 挂载存储媒体 linux文件系统将所有的磁盘都并入一个虚拟目录下,当使用新的存储媒体之前,需要把它放到虚拟目录下,这项工作称为挂载(mounting) 1.1 mount 命令 在linux上用 ...

  5. Linux分区和挂载的理解

    在工作中经常使用到Linux,对分区和挂载的概念一直都很模糊,对网上的信息进行了整理,方便理解. 1为什么要分区(需理解硬盘的组成) 1)数据的安全性,因为每个分区的数据是分开的.所以,当你需要将某个 ...

  6. Linux分区和挂载硬盘

    分区: [root@code-svn ~]# fdisk /dev/sdb WARNING: DOS-compatible mode is deprecated. It's strongly reco ...

  7. 在VirtualBox ubuntu/linux虚拟机中挂载mount共享文件夹

    referemce: https://www.smarthomebeginner.com/mount-virtualbox-shared-folder-on-ubuntu-linux/ 1) Virt ...

  8. linux分区(挂载)

    主分区: 最多4个扩展分区: 最多一个: 扩展分区+主分区最多4个: 不能存放数据,只能划分逻辑分区逻辑分区: 可格式化.存放数据: 分区编号只能从5开始(1.2.3.4编号为主分区或扩展分区) 所有 ...

  9. Linux学习之分区自动挂载与fstab文件修复(九)

    linux分区自动挂载与fstab文件修复 在前面我们实现新添加硬盘,进行分区与格式化,然后手动挂载,这样做,在重启后,需要重新挂载才能使用. https://www.cnblogs.com/-wen ...

随机推荐

  1. 【转】国外几款GPS卫星历预报软件

    以下是几款著名GPS厂商的星历软件: Trimble星历软件: http://www.trimble.com/planningsoftware.shtml Topcon星历软件: http://www ...

  2. Activity组件安全(下)

    什么是Activity劫持 简单的说就是APP正常的Activity界面被恶意攻击者替换上仿冒的恶意Activity界面进行攻击和非法用途.界面劫持攻击通常难被识别出来,其造成的后果不仅会给用户带来严 ...

  3. SpringMVC源码之Controller查找原理

    摘要 本文从源码层面简单讲解SpringMVC的处理器映射环节,也就是查找Controller详细过程. SpringMVC请求流程 Controller查找在上图中对应的步骤1至2的过程 Sprin ...

  4. unicode文件处理(如果是ANSI编码就不需要了)

    1.unicode文件的打开必须用rb模式. 3.wchar_t str[100] = { 0 }; 这个占200个字节. 2.宽字符对应的处理 fgetc fgetwc fputc fputwc f ...

  5. [svn] TortoiseSVN 图文操作

    TortoiseSVN 图文操作 [参考]https://jingyan.baidu.com/article/6c67b1d6f524d52787bb1ef3.html

  6. [DeeplearningAI笔记]改善深层神经网络_深度学习的实用层面1.9_归一化normalization

    觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.9 归一化Normaliation 训练神经网络,其中一个加速训练的方法就是归一化输入(normalize inputs). 假设我们有一个 ...

  7. JAVA设计模式之---工厂模式

    1.引言 工厂模式可以分为类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory)  这种模式从上 ...

  8. Newtonsoft.Json 操作 JSON 字符串

    Newtonsoft.Json介绍 在做开发的时候,很多数据交换都是以json格式传输的.而使用Json的时候,我们很多时候会涉及到几个序列化对象的使用:DataContractJsonSeriali ...

  9. 走进JavaScript——重拾函数

    创建函数 通过构造器的方式来创建函数,最后一个参数为函数体其他为形参 new Function('a','b','alert(a)') /* function anonymous(a,b) { ale ...

  10. ssh: Could not resolve hostname git.*****-inc.com : Temporary failure in name resolution fatal: The remote end hung up unexpectedly

    问题出现的情景:使用git pull拉取开发的代码到测试服务器,报错: ssh: Could not resolve hostname git.****-inc.com : Temporary fai ...