1、首先,我们聊下硬盘。

我们都知道硬盘是用来存储文件的,当然配合着文件系统(文件系统管理着对应的硬件资源)。

硬盘由多个磁盘组成,每个磁盘有两面,每面有一个磁头,磁盘上有多个磁道。

硬盘被分为多个扇区,当前正常一个扇区是512byte。第一个扇区存储主引导记录及分区表信息。

linux硬盘挂载_第1张图片

硬盘存储容量=磁头数×磁道(柱面)数×每道扇区数×每扇区字节数 

(1)硬盘有数个盘片,每盘片两个面,每个面一个磁头 

(2)盘片被划分为多个扇形区域即扇区 

(3)同一盘片不同半径的同心圆为磁道 

(4)不同盘片相同半径构成的圆柱面即柱面 

(5)公式: 存储容量=磁头数×磁道(柱面)数×每道扇区数×每扇区字节数 

(6)信息记录可表示为:××磁道(柱面),××磁头,××扇区 


2、linux下的硬盘分区及挂载

2.1 一切都以文件的形式体现

在linux中,所有的设备都以文件的形式体现,包括硬盘。

设备文件路径 /dev 路径中。如下图,机器中存在一个硬盘 sda。并存在分区 sda1,sda2,sda5.

linux硬盘挂载_第2张图片

另外 / 路径是linux系统的根路径。

如下该机器,sda1分区挂载在根路径下,该分区85G大小。

jetxu@ubuntu:/dev$ df -h

Filesystem      Size  Used Avail Use% Mounted on

udev            982M  4.0K  982M   1% /dev

tmpfs           199M  1.7M  197M   1% /run

/dev/sda1        85G   23G   58G  29% /

none            4.0K     0  4.0K   0% /sys/fs/cgroup

none            5.0M     0  5.0M   0% /run/lock

none            992M  144K  992M   1% /run/shm

none            100M   36K  100M   1% /run/user

2.2 新增硬盘并进行分区

我们该机器进行举例

该机器是一个windows上使用vmware建立的虚拟机,ubuntu系统。

首先我们添加硬盘,添加后需要重启。

linux硬盘挂载_第3张图片

添加之后,在/dev中我们可以看到新添加的硬盘设备: /dev/sdb

linux硬盘挂载_第4张图片

2.3硬盘分区

查找到新添的硬盘文件后(/dev/sdb),我们需要对其进行分区

jetxu@ubuntu:/dev$ sudo fdisk sdb

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel

Building a new DOS disklabel with disk identifier 0x1fc07a59.

Changes will remain in memory only, until you decide to write them.

After that, of course, the previous content won't be recoverable.


Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)


Command (m for help): m

Command action

   a   toggle a bootable flag

   b   edit bsd disklabel

   c   toggle the dos compatibility flag

   d   delete a partition

   l   list known partition types

   m   print this menu

   n   add a new partition

   o   create a new empty DOS partition table

   p   print the partition table

   q   quit without saving changes

   s   create a new empty Sun disklabel

   t   change a partition's system id

   u   change display/entry units

   v   verify the partition table

   w   write table to disk and exit

   x   extra functionality (experts only)


Command (m for help): p


Disk sdb: 5368 MB, 5368709120 bytes

255 heads, 63 sectors/track, 652 cylinders, total 10485760 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x1fc07a59


Device Boot      Start         End      Blocks   Id  System


Command (m for help): n

Partition type:

   p   primary (0 primary, 0 extended, 4 free)

   e   extended

Select (default p): p

Partition number (1-4, default 1): 1

First sector (2048-10485759, default 2048): 

Using default value 2048

Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759): +2G


Command (m for help): w

The partition table has been altered!


Calling ioctl() to re-read partition table.

Syncing disks.

上面的过程我们添加了一个2Gbyte的分区 sdb1

上面我们注意到分区number只能是1~4,这是因为:

我们前面聊过第一个扇区存储主引导记录及分区信息,

主引导记录需要446byte,每个分区信息需要16byte,而一个扇区只有512byte,

因此(512-446)/16 ---- 4 最多4个分区。

当然我们可以选择用 3 个主分区加 1 个扩展分区的方法,扩展分区中能够创建无限个逻辑分区。


如下图,分区后我们可以找到分区文件 /dev/sdb1

linux硬盘挂载_第5张图片

2.4格式化分区

我们将/dev/sdb1 格式化为ext4 (ext4是其中一种文件系统格式)

jetxu@ubuntu:/dev$ mkfs.ext4 /dev/sdb1

mke2fs 1.42.9 (4-Feb-2014)

mkfs.ext4: Permission denied while trying to determine filesystem size

jetxu@ubuntu:/dev$ sudo mkfs.ext4 /dev/sdb1

mke2fs 1.42.9 (4-Feb-2014)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

Stride=0 blocks, Stripe width=0 blocks

131072 inodes, 524288 blocks

26214 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=536870912

16 block groups

32768 blocks per group, 32768 fragments per group

8192 inodes per group

Superblock backups stored on blocks: 

        32768, 98304, 163840, 229376, 294912


Allocating group tables: done                            

Writing inode tables: done                            

Creating journal (16384 blocks): done

Writing superblocks and filesystem accounting information: done 


2.5挂载分区

挂载大致可以理解为将存储设备与某个路径挂接在一起。


挂载分区可以使用mount进行临时挂载,也可以直接修改fstab进行挂载。

2.5.1 mount临时挂载

mount临时挂载的设备,在重启系统后,不再挂载。挂载期间创建、写入的文件不会丢失。

jetxu@ubuntu:~$ mkdir mynewdisk

jetxu@ubuntu:~$ ls

bin  Desktop  Documents  Downloads  examples.desktop  Music  myLearn  mynewdisk  Pictures  Public  Templates  Videos  works

jetxu@ubuntu:~$ sudo mount /dev/sdb1 ~/mynewdisk


挂载后

jetxu@ubuntu:/dev$ df -h

Filesystem      Size  Used Avail Use% Mounted on

udev            982M  4.0K  982M   1% /dev

tmpfs           199M  1.7M  197M   1% /run

/dev/sda1        85G   23G   58G  29% /

none            4.0K     0  4.0K   0% /sys/fs/cgroup

none            5.0M     0  5.0M   0% /run/lock

none            992M  144K  992M   1% /run/shm

none            100M   36K  100M   1% /run/user

/dev/sdb1       2.0G  3.1M  1.8G   1% /home/jetxu/mynewdisk


这样我们就可以使用新加进来的硬盘资源了。对 /home/jetxu/mynewdisk 路径的操作有基于新加的硬盘。

2.5.2 永久挂载

对/etc/fstab文件做如下添加

/dev/sdb1       /home/jetxu/mynewdisk ext4 defaults 0 0


jetxu@ubuntu:/dev$ cat /etc/fstab

# /etc/fstab: static file system information.

#

# Use 'blkid' to print the universally unique identifier for a

# device; this may be used with UUID= as a more robust way to name devices

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

#

#            

# / was on /dev/sda1 during installation

UUID=1664b5bb-45e6-43f5-bfe7-3ae34ccaa6ac /               ext4    errors=remount-ro 0       1

# swap was on /dev/sda5 during installation

UUID=e714a2eb-4856-4081-893f-29bd947a3dc2 none            swap    sw              0       0

/dev/fd0        /media/floppy0  auto    rw,user,noauto,exec,utf8 0       0

/dev/sdb1       /home/jetxu/mynewdisk ext4 defaults 0 0

重启后(启动过程系统自动挂载)

jetxu@ubuntu:/dev$ df -h

Filesystem      Size  Used Avail Use% Mounted on

udev            982M  4.0K  982M   1% /dev

tmpfs           199M  1.7M  197M   1% /run

/dev/sda1        85G   23G   58G  29% /

none            4.0K     0  4.0K   0% /sys/fs/cgroup

none            5.0M     0  5.0M   0% /run/lock

none            992M  144K  992M   1% /run/shm

none            100M   32K  100M   1% /run/user

/dev/sdb1       2.0G  3.1M  1.8G   1% /home/jetxu/mynewdisk