Linux之存储介质——mount、umount、fdisk、mkfs

本节讨论设备级别的数据处理。对于诸如硬盘之类的物理存储器、网络存储器以及像RAID(独立冗余磁盘陈列)和LVM(逻辑卷管理)之类的虚拟存储器,Linux都有惊人的处理能力。
本节主要用到以下命令

  • mount: 挂载文件系统
  • umount: 卸载文件系统
  • fdisk: 硬盘分区命令
  • mkfs:创建文件系统

0.参考文献

《Linux命令行大全》 [美] William E. Shotts. Jr 著 郭光伟 郝记生 译, 人民邮电出版社

更多有用的Linux知识详解,可参加博主的Linux学习导航页

1.挂载、卸载存储设备

Linux图形界面操作在多数情况下,设备只要连接上系统就能运行。由于像服务器这类的非图形界面操作系统通常都有一些极致的存储需求和复杂的配置要求,所以这类系统中管理存储设备很大程度上还是靠手动操作。
管理存储设备首先要做的就是将该设备添加到文件系统树中,从而允许操作系统可以操作该设备,这个过程称之为挂载
注意,类Unix操作系统,与Linux相似,都只有一个文件系统树,设备则都连接到树的不同点上。这与Windows不同,它对于每个设备都有独立的树(如C:\、D:\等)。

/etc/fstab文件内容列出了系统启动时挂载的设备(通常是硬盘分区)。例如,博主的TX2上文件内容为

# <file system> <mount point>             <type>          <options>                           <dump> <pass>
/dev/root            /                     ext4           defaults                                     0 1

表1 /etc/fatab文件6个参数含义

字段内容描述
1设备通常,该字段表示的是与物理设备相关的设备文件的真实名称。比如/dev/hda1就表示第一个IDE通道上的主设备的第一块分区。但是如今的计算机有很多可热拔插的设备(像USB驱动器),所以许多较新的Linux发行版用文本标签来关联设备。当设备与系统连接后,该标签(格式化后就会加到存储介质中)就会被操作系统识别。通过这样的方式,不管实际的物理设备被分配到哪个设备文件,它仍然能被正确识别。
2挂载节点设备附加到文件系统树的的目录
3文件系统类型Linux可以挂载很多文件系统类型,最常见的原始文件系统是ext3,但也支持许多其它系统如FAT16(msdos)、FAT32(vfat)、NTFS(ntfs)、CD-ROM(iso9660)等
4选项文件系统挂载时可以使用许多选项参数,比如,可以设置文件系统以只读的方式挂载或者阻止任何程序修改它们(对于可移动设备是一个很有用的维护安全性的方法)
5频率此数值被dump命令用来决定是否对该文件系统进行备份以及多久备份一次
6优先级此数值被fsck命令用来决定在启动时需要被扫描的文件系统的顺序

1.1 查看已挂在的文件系统列表

mount命令用于文件系统挂载。不带任何参数输入该命令将会调出目前已经挂载的文件系统列表。

$ mount
proc on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
none on /dev type devtmpfs (rw,relatime,size=3984564k,nr_inodes=996141,mode=755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/unified type cgroup2 (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/debug type cgroup (rw,nosuid,nodev,noexec,relatime,debug)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=26,pgrp=1,timeout=0,minproto=5,maxproto=5,direct)
mqueue on /dev/mqueue type mqueue (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
sunrpc on /run/rpc_pipefs type rpc_pipefs (rw,relatime)
configfs on /sys/kernel/config type configfs (rw,relatime)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=804864k,mode=700,uid=1000,gid=1000)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)

列表的格式为:
device on mount_point type filesystem_type(options)
当我们为TX2(ubuntu 18.04)插入一个移动硬盘(我的硬盘分了两个区)的时候,最后一行多出如下:

/dev/sda2 on /media/deeid-2/生活娱乐 type fuseblk (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096,uhelper=udisks2)
/dev/sda1 on /media/deeid-2/I type fuseblk (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096,uhelper=udisks2)

以第二个条目来说,表示名为/dev/sda1的设备已经挂载了/media/deeid-2/I目录下,并且是fuseblk类型。
获取设备名后,便可以卸载该设备,然后将其挂载到系统树的另外一个节点上。进行此操作,必须首先获得超级用户权限,再使用umount命令卸载设备

$ sudo umount /dev/sda1

接下来,为其创建一个新的挂载节点。挂载节点仅仅是文件系统上的某个目录,并没有什么特别之处。甚至不需要是空目录。尽管在非空目录上挂载设备,该目录下原有内容将不可见直到此设备被卸载。
例如,创建一个新目录

$ mkdir ~/test/
$ sudo mount -t fuseblk /dev/sda1 ~/test/

之后,就可以通过新建的挂载节点访问移动硬盘的内容:

$ cd ~/test/
$ ls

注意,此时如果想卸载移动硬盘会出现报错

$ sudo umount /dev/sda1
umount: /dev/sda1: device is busy

这是由于设备正在被某人或是某程序使用时是不能被卸载的。当下工作目录是移动硬盘的挂载节点,所以导致了错误警告。退出该工作目录即可。

1.2 确定设备名称

如果操作的是一台服务器或者不支持自动挂载的情况,如何确定设备名称?
首先了解系统是如何命名设备的

$ ls /dev

发现输出大量设备,ls命令输出的表单揭示了设备命的一些固定模式,部分如表2。
表2 Linux存储设备名称

模式设备
/dev/fd*软盘驱动器
/dev/hd*较旧系统上的IDE(或PATA)硬盘
/dev/lp*打印机设备
/dev/sd*SCSI硬盘,在最近的Linux系统上,内核把所有的类硬盘设备(包括PATA/SATA硬盘、闪存、USB海量存储设备比如便携式音乐播放器或数码相机等)都当做SCSI硬盘
/dev/sr*光驱(CD/DV播放机和刻录机)

2.创建新的文件系统

将一个使用FAT32文件系统的闪存驱动器重新格式化为Linux本地文件系统。需要两个步骤:

  • Step1: (可选)在对现有分区不满意的情况下创建一个新的分区布局
  • Step2: 在驱动器上创建一个新的空文件系统

2.1 用fdisk命令进行磁盘分区

fdisk命令实现用户和磁盘设备(比如硬盘驱动器和闪存驱动器)进行较低层次的直接交互。该工具用来编辑、删除以及创建设备分区。使用闪存前,我们必须将其卸载,然后再启动fdisk程序

$ sudo umount /dev/sda1
$ sudo fdisk /dev/sda1

注意,设备名称要根据你的实际情况来。
程序启动后,会出现下面的指定信息:

Command (m for help):

输入m后显示如下菜单:


  DOS (MBR)
   a   toggle a bootable flag
   b   edit nested BSD disklabel
   c   toggle the dos compatibility flag

  Generic
   d   delete a partition
   F   list free unpartitioned space
   l   list known partition types
   n   add a new partition
   p   print the partition table
   t   change a partition type
   v   verify the partition table
   i   print information about a partition

  Misc
   m   print this menu
   u   change display/entry units
   x   extra functionality (experts only)

  Script
   I   load disk layout from sfdisk script file
   O   dump disk layout to sfdisk script file

  Save & Exit
   w   write table to disk and exit
   q   quit without saving changes

  Create a new label
   g   create a new empty GPT partition table
   G   create a new empty SGI (IRIX) partition table
   o   create a new empty DOS partition table
   s   create a new empty Sun partition table

首先,查看现有的磁盘分区布局,可以通过输入字母p打印显示设备的分区表:

Command (m for help): p

Disk /dev/sda1: 115.5 GiB, 124016132096 bytes, 242219008 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
Disklabel type: dos
Disk identifier: 0x73736572

Device      Boot      Start        End    Sectors   Size Id Type
/dev/sda1p1      1920221984 3736432267 1816210284   866G 72 unknown
/dev/sda1p2      1936028192 3889681299 1953653108 931.6G 6c unknown
/dev/sda1p3               0          0          0     0B  0 Empty
/dev/sda1p4        27722122   27722568        447 223.5K  0 Empty

然后输入l,一张包含所有可能分区类型的对照表便显示出来。查表,可以看到Linux分区类型用83表示。
回到程序菜单,会看到用来改变区分ID的菜单选项

t   change a partition type

在提示框输入t和新的ID:

Command (m for help): t
Partition number (1-4, default 4): 1
Hex code (type L to list all codes): 83

Changed type of partition 'unknown' to 'Linux'.

完成了分区ID的修改,到目前为止,设备一直处于未开发状态(所有的变化都存储在了内存中而非物理设备上),所以下一步我们就该向设备写入修改后的分区表,然后退出。

Command (m for help): w
The partition table has been altered.
Syncing disks.

2.2 用mkfs命令创建新的文件系统

在编辑分区结束后,mkfs(make filesystem)命令可以来创建各种类型的文件系统。例如如果我们想在设备上创建ext4文件系统,可以

sudo mkfs -t ext4 /dev/sda1
mke2fs 1.44.1 (24-Mar-2018)
/dev/sda1 contains a ntfs file system
Proceed anyway? (y,N) y
Creating filesystem with 30277376 4k blocks and 7569408 inodes
Filesystem UUID: 2ac43b2e-7f84-4832-85bb-ef71809b8785
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done
Writing inode tables: done
Creating journal (131072 blocks): done
Writing superblocks and filesystem accounting information:
 20:47:15 up  2:08,  2 users,  load average: 3.90, 2.87, 1.90
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
deeid-2  :0       :0               18:39   ?xdm?   7:55   0.01s /usr/lib/gdm3/gdm-x-session --run-script /usr/lib/gnome-session/run-systemd-se
deeid-2  pts/2    192.168.31.209   19:20    0.00s  1.29s  0.04s w
deeid-2@deepid2-desktop:~$ e
-bash: e: command not found
deeid-2@deepid2-desktop:~$
deeid-2@deepid2-desktop:~$ r
-bash: r: command not found
deeid-2@deepid2-desktop:~$ w
 20:47:15 up  2:08,  2 users,  load average: 3.90, 2.87, 1.90
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
deeid-2  :0       :0               18:39   ?xdm?   7:56   0.01s /usr/lib/gdm3/gdm-x-session --run-script /usr/lib/gnome-session/run-systemd-se
deeid-2  pts/2    192.168.31.209   19:20    0.00s  1.28s  0.03s w

这种分区及格式化过程适用于任何有额外存储设备插入系统的时候。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux下的磁盘加密技术有很多种,其中比较常用的是LUKS(Linux Unified Key Setup)。LUKS是Linux下磁盘加密的一种标准,它可以对整个磁盘或者分区进行加密,保护数据的隐私性和安全性。 LUKS的工作原理是,在磁盘上创建一个加密容器,所有数据都保存在这个容器内部,容器本身是通过一个密钥进行加密的。在使用磁盘前,需要输入这个密钥进行解密,才能访问容器内部的数据。 下面是在Linux下使用LUKS对磁盘进行加密的步骤: 1. 创建一个空的分区或整个磁盘,可以使用fdisk或parted命令进行分区操作。 2. 使用cryptsetup命令对分区或整个磁盘进行加密操作,如下所示: ```shell $ sudo cryptsetup luksFormat /dev/sda1 ``` 这个命令会提示输入加密密码,确认后会将/dev/sda1这个分区进行加密,加密完成后需要使用下面的命令来打开该加密分区: ```shell $ sudo cryptsetup luksOpen /dev/sda1 my_encrypted_partition ``` 这个命令会提示输入加密密码,输入正确的密码后,会将/dev/sda1解密并挂载到/my_encrypted_partition目录下。 3. 格式化解密后的分区,可以使用mkfs.ext4或其他格式化命令: ```shell $ sudo mkfs.ext4 /dev/mapper/my_encrypted_partition ``` 4. 挂载解密后的分区: ```shell $ sudo mount /dev/mapper/my_encrypted_partition /mnt/my_encrypted_partition ``` 至此,整个加密分区已经成功挂载到/mnt/my_encrypted_partition目录下了。 5. 卸载并关闭加密分区: ```shell $ sudo umount /mnt/my_encrypted_partition $ sudo cryptsetup luksClose my_encrypted_partition ``` 以上就是使用LUKS对磁盘进行加密的基本步骤。需要注意的是,在使用LUKS加密分区时,一定要妥善保管好加密密码,否则数据将无法访问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值