命令来自这里:从整个磁盘(设备)的映像中挂载单个分区
关于第一个命令,我需要“计算从图像开始到分区开始的偏移量”,但不知道** 中引用的数字是什么意思(本例中为 512):
$ sudo fdisk -lu sda.img
...
Units = sectors of 1 * **512** = **512** bytes
Sector size (logical/physical): **512** bytes / **512** bytes
...
Device Boot Start End Blocks Id System
sda.img1 * 56 6400000 3199972+ c W95 FAT32 (LBA)
关于第二条命令,“loop0”是什么:
sudo losetup -o 28672 /dev/loop0 sda.img
我看了看,它看起来像一个文本文件,但它不是,它也不是文件夹。那是什么文件?我可以给它取另一个名字吗?如果可以,我应该先创建它吗?
第三个命令如何工作?其中每个部分的含义是什么?
sudo mount /dev/loop0 /mnt
我已经成功运行命令来做我想做的事情,对我来说,下次更好地理解它并帮助其他人很重要。
感谢您的回答和教导我(:
答案1
在第一个命令中,512 这个数字指的是镜像的块大小。当将文件写入磁盘时,它会使用 x 个块。任何未使用的块的剩余部分都是浪费的空间。这就是为什么您有时会看到列为大小(文件、文件夹等的实际大小)和磁盘大小(实际占用的磁盘空间量,允许块大小不匹配)。例如,对于一个 1234 字节的文件,如果我们使用 512 字节的块,那么它实际上会占用 3 个块,或者 1536 字节(512 * 3)和 302 字节(1536 - 1234)字节将被“浪费”。
loop0 是一个回送设备。/dev 下的所有文件实际上都是设备(因此得名 :-))。Linux 将设备视为文件,这使得在处理硬件时可以非常轻松地完成某些操作。例如,以下命令将直接将音频文件发送到声卡进行播放(无需软件,很棒!)
cat sound.wav > /dev/audio
环回设备是 Linux 在类似您的情况中使用的特殊伪设备。您在该命令中所说的是您希望 Linux 将映像文件视为硬盘驱动器。这允许您在映像文件上运行通常在硬盘驱动器上运行的任何命令。
对于最后一个命令,我们只是将虚拟驱动器(您的映像文件)上的文件系统安装到本地文件系统上的某个位置。在 Linux 中,我们使用平面目录结构,这就是为什么每个文件位置(包括设备、网络驱动器和外部硬盘驱动器等)都以“/”开头,这也称为文件系统的根目录。安装文件系统只是将其放在系统其余部分可以访问的位置(/ 下的某个位置)。
现在,默认情况下只有名为“root”的用户才能挂载文件系统。root 用户基本上与 Windows 上的管理员用户相同。可以在计算机上执行任何操作的人。在 Ubuntu 中,出于安全考虑,root 用户是隐藏的,因此我们需要使用sudo
。sudo 命令基本上意味着“嘿,让我成为 root 用户来运行这个命令”。
mount
这是我们以 root 身份运行的命令 (sudo),/dev/loop0 是我们之前创建的虚拟驱动器,/mnt 是我们希望映像可在其上访问的位置。/mnt 和 /media 是 Linux 中挂载文件系统的标准位置,但您可以将其放在任何位置。最佳做法是在 /mnt 或 /media 下创建子文件夹以进行挂载,而不仅仅是 /mnt。这是因为您可能在那里挂载了其他文件系统,如果您在它们之上挂载,它们将无法访问!唯一需要注意的是,您需要 root 权限才能在此处创建文件夹,因此您的最后一个命令实际上应该是两个命令,如下所示:
sudo mkdir /mnt/myimg
sudo mount /dev/loop0 /mnt/myimg
mkdir
只是创建目录的命令。