AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 19712
In Process
Jim
Jim
Asked: 2009-06-05 06:31:45 +0800 CST2009-06-05 06:31:45 +0800 CST 2009-06-05 06:31:45 +0800 CST

以非 root 用户身份创建带有分区的磁盘映像

  • 772

我正在尝试构建磁盘映像作为构建系统(当前为 SCons)的输出。从目录结构创建磁盘映像非常容易,例如使用 genext2fs (http://genext2fs.sourceforge.net/)。

但我想做的是创建一个包含来自多个目录的多个分区的图像。我目前必须通过将 dd、losetup、kpartx、mount 和复制文件粘合在一起来做到这一点。这需要 root 访问权限。

作为非root用户有什么方便的方法吗?那里有任何应用程序,适合包含在可以有效执行此任务的构建系统中吗?

rootfs
  • 7 7 个回答
  • 2532 Views

7 个回答

  • Voted
  1. Christopher Cashell
    2009-06-10T09:46:21+08:002009-06-10T09:46:21+08:00

    我不想这么说,但我不知道有什么简单的方法可以做到这一点。

    很有可能您可以通过使用 dd 创建一个映像文件,然后使用 fdisk 对其进行分区,然后使用 dd 创建第二个映像文件,并直接对其进行格式化(或使用类似 genext2fs 的东西),然后对第二个文件系统进行 dd'ing 来完成某些工作图像到第一个分区的图像文件中的正确偏移量。. . 然而,这将是困难和复杂的。

    不过,恐怕我不知道有什么好的方法可以在没有 root 访问权限的情况下完成此操作。

    • 1
  2. Sven
    2009-06-10T10:00:47+08:002009-06-10T10:00:47+08:00

    根据您要避免 root 访问的原因,sudo 可能是一个解决方案。

    编写一个脚本来完成任务所需的所有工作,确保用户不能通过“创造性”输入滥用它,然后为有问题的用户提供该脚本的 sudo 权限,仅此而已。

    • 1
  3. sirakov
    2009-06-05T06:31:46+08:002009-06-05T06:31:46+08:00

    你可以试试mkisofs...

    mkisofs -l -iso-level 4 -o file.iso 文件夹

    • 0
  4. kbyrd
    2009-06-05T06:31:47+08:002009-06-05T06:31:47+08:00

    我没试过这个,但你试过 fakeroot 吗?它通常在基于 Debian 的发行版上用于引导安装所需的初始文件集(或者在 64 位系统的情况下,带有 32 位文件的 chroot)。你没有说你使用的是什么操作系统,fakeroot 可能不适合你。

    我已经看到这个问题以另一种方式解决,在构建系统中使用虚拟机。在虚拟机中,您可以成为 root,而不会弄乱实际构建机器上的操作系统,您可以对其进行快照,以便每次开机时都处于相同的干净状态。

    • 0
  5. MikeyB
    2009-06-24T17:13:17+08:002009-06-24T17:13:17+08:00

    您创建的各种分区是否已知大小?

    您可以通过创建具有已知字节偏移量的分区的模板“磁盘映像”来解决该问题,然后使用dd.

    • 0
  6. Michael Shigorin
    2012-04-04T10:16:29+08:002012-04-04T10:16:29+08:00
    1. https://serverfault.com/a/332114/100216;
    2. 如果 ISO9660 通常适合您,请参阅 syslinux 发行版中的 isohybrid 脚本。
    • 0
  7. Jianhong
    2022-03-11T23:33:17+08:002022-03-11T23:33:17+08:00

    最近遇到类似的问题,主要原因是操作loop设备文件需要root权限。和MikeyB的回答有同样的想法

    这是我的代码:

    create_vdiskn() {
    local path=$1
    local dsize=$2
    local fstype=$3
    local imghead=img-head-$$
    local imgtail=img-tail-$$
    local fn=${FUNCNAME[0]}
    
    echo -e "\n[$fn:info] creating disk and partition"
    dd if=/dev/null of=$path bs=1${dsize//[0-9]/} seek=${dsize//[^0-9]/}
    printf "o\nn\np\n1\n\n\nw\n" | fdisk "$path"
    partprobe "$path"
    
    read pstart psize < <( LANG=C parted -s $path unit B print | sed 's/B//g' |
        awk -v P=1 '/^Number/{start=1;next}; start {if ($1==P) {print $2, $4}}' )
    echo -e "\n[$fn:info] split disk head and partition($pstart:$psize)"
    dd if=$path of=$imghead bs=${pstart} count=1
    truncate --size=${psize} $imgtail
    
    echo -e "\n[$fn:info] making fs($fstype)"
    mkfs.$fstype $MKFS_OPT "$imgtail"
    
    echo -e "\n[$fn:info] concat image-head and partition"
    cat $imghead $imgtail >$path
    rm -vf $imghead $imgtail
    }
    
    [[ $# -lt 3 ]] && {
    cat <<-COMM
    Usage: [MKFS_OPT=xxx] $0 <image> <size> <fstype>
    Examples:
      $0 usb.img 256M vfat
      $0 ext4.img 4G ext4
      MKFS_OPT="-f -i attr=2,size=512" $0 xfs.img 4G xfs
    COMM
    exit 1
    }
    create_vdiskn "$@"
    
    • 0

相关问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve