我想了解Linux文件系统的布局。为什么该命令在虚拟框内起作用,但在Windows的Linux Shell上却不起作用?
我试图在我的虚拟盒子(Ubuntu)和Windows(从Microsoft Store)的Ubuntu上都使用命令sudo fdisk -l dev/sda
。它对它们中的任何一个都不起作用,但是当我将命令更改为sudo fdisk -l
时,它可以在虚拟框中运行,但不能在Windows上的linux bash shell上运行。
在Windows上的Linux shell内部:
:~$ sudo fdisk -l /dev/sda
.
fdisk: cannot open /dev/sda: No such file or directory
:~$ sudo fdisk -l
fdisk: cannot open /proc/partitions: No such file or directory
:~$ man fdisk
:~$ whereis fdisk
fdisk: /sbin/fdisk /usr/share/man/man8/fdisk.8.gz
答案 0 :(得分:0)
Windows Linux子系统(WSL)的基础-Ubuntu是POSIX仿真器,类似于Cygwin这样的环境,有助于在Windows进程中移植一些在Windows平台上运行的基于Linux的命令/应用程序。
它包含虚拟文件系统(vfs)的抽象层,该文件系统具有基于只读应用程序映像和基于RAM的可写tmpfs,并且既没有访问控制权也无法读取主机系统上的原始设备,也不模拟原始设备子系统。
来自man(fdisk):
说明
此命令用于创建和修改分区表,并安装主引导(仅限IA)记录 放在固定磁盘的第一个扇区中。该表由 第一阶段引导程序(或固件)以识别磁盘的各个部分 保留给不同的操作系统,并标识 包含第二阶段引导程序的分区(活动的Solaris 划分)。 必须使用rdevice参数指定原始 与固定磁盘关联的设备,例如, / dev / rdsk / c0t0d0p0。
因此WSL-Ubuntu无法成功执行fdisk命令,因为它没有自己的内核来管理主机资源。
另一方面,Oracle的 VirtualBox 是一个虚拟系统,它模仿了在裸机上运行的功能齐全的OS。它借助虚拟化管理程序模拟自己的系统空间和用户空间,并通过Guest OS内核管理虚拟资源。这就是为什么在VirtualBox上成功执行fdisk命令的原因
参考: https://www.microsoft.com/en-us/research/wp-content/uploads/2013/01/posix-emulation-submitted.pdf