为什么挂载这个 ext4 镜像失败?

为什么挂载这个 ext4 镜像失败?

我正在学习 Linux 文件系统,并尝试按照说明创建 ext4 映像,将其安装到目录,然后运行反引导程序在该安装目录中。

我的说明的第 1 步很简单docker run -it ubuntu
其余指令应在正在运行的容器中运行:

output_file="output.ext4"
OUTPUT_DIR="/output"
OUTPUT_FILE_PATH="${OUTPUT_DIR}/${output_file}"
ROOTFS_DIR="/rootfs"
mkdir -p "${OUTPUT_DIR}"
truncate -s 4G "${OUTPUT_FILE_PATH}"
mkfs.ext4 "${OUTPUT_FILE_PATH}"
mkdir -p "${ROOTFS_DIR}"
mount "${OUTPUT_FILE_PATH}" "${ROOTFS_DIR}"

失败:

$ docker run -it ubuntu
root@1397d90526b0:/# output_file="output.ext4"
root@1397d90526b0:/# OUTPUT_DIR="/output"
root@1397d90526b0:/# OUTPUT_FILE_PATH="${OUTPUT_DIR}/${output_file}"
root@1397d90526b0:/# ROOTFS_DIR="/rootfs"
root@1397d90526b0:/# mkdir -p "${OUTPUT_DIR}"
root@1397d90526b0:/# truncate -s 4G "${OUTPUT_FILE_PATH}"
root@1397d90526b0:/# mkfs.ext4 "${OUTPUT_FILE_PATH}"
mke2fs 1.45.5 (07-Jan-2020)
Discarding device blocks: done
Creating filesystem with 1048576 4k blocks and 262144 inodes
Filesystem UUID: 43049653-4659-4a98-bc6e-407f182905db
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

root@1397d90526b0:/# mkdir -p "${ROOTFS_DIR}"
root@1397d90526b0:/# mount "${OUTPUT_FILE_PATH}" "${ROOTFS_DIR}"
mount: /rootfs: mount failed: Operation not permitted.
root@1397d90526b0:/#

问题:为什么挂载失败,我该如何解决?
我的指令与其他各种命令一起执行,例如反引导程序并且没有提到失败。

答案1

@AB 让我了解了权限限制的概念。

有效的(以及我的说明中省略的)是 docker 容器应该在特权模式下运行。

docker run -it --privileged ubuntu,遵循与原始帖子中相同的步骤,允许命令成功mount "${OUTPUT_FILE_PATH}" "${ROOTFS_DIR}"

相关内容