创建USB安装程序以从命令行安装Ubuntu?


22

我正在尝试创建可启动的USB映像,以在新计算机上安装Ubuntu。

在按照Ubuntu桌面的“ 创建USB驱动器 ”说明进行操作之前,我已经完成了此操作,但是我没有可用的Ubuntu桌面。

如何仅使用命令行执行相同操作?

我尝试过的事情:

  • 按照ubuntu.com针对Mac的“创建USB驱动器”说明在Mac OS X上创建可引导USB:不引导。
  • usb-creator:根据apt-cache search usb-creator和Wikipedia,usb-creator仅作为图形工具存在。
  • “手动创建”说明在help.ubuntu.com:文件和目录都没有描述(例如casperfilesystem.manifestmenu.lst)存在的ISO映像中,我不知道是什么取代了它们。
  • unetbootin脚本:即使完全编写脚本,也需要X服务器(图形支持)才能运行。(该命令sudo unetbootin lang=en method=diskimage isofile=~/ubuntu-10.10-server-amd64.iso installtype=USB targetdrive=/dev/sdg1 autoinstall=yes给出一条错误消息unetbootin: cannot connect to X server。)

更新资料

还尝试了GRUB摆弄:合并来自

我能够到达一半-它从USB启动,显示了grub菜单并开始安装,但是安装未完成。

作为参考,这是我最近得到的:

sudo su
  # mount USB pen
mount /dev/sd[X]1 /media/usb
  # install GRUB
grub-install --force --no-floppy --root-directory=/media/usb /dev/sd[X]
  # copy ISO image to USB
cp ~/ubuntu-10.10-server-amd64.iso /media/usb
  # mount ISO image, copy existing grub.cfg
mount ~/ubuntu-10.10-server-amd64.iso /media/iso/ -o loop
cp /media/iso/boot/grub/grub.cfg /media/usb/boot/grub/

然后/media/usb/boot/grub.cfg,我编辑以添加.iso回送,例如grub条目:

menuentry "Install Ubuntu Server" {
  set gfxpayload=keep
  loopback loop /ubuntu-10.10-server-amd64.iso  
  linux (loop)/install/vmlinuz  file=(loop)/preseed/ubuntu-server.seed iso-scan/filename=/ubuntu-10.10-server-amd64.iso quiet --
  initrd (loop)/install/initrd.gz
}

从USB引导时,这将为我提供Grub引导菜单并启动安装程序,但在几个屏幕抱怨找不到CD-ROM驱动器后,安装程序放弃了。(自然,因为我要安装的盒子没有光驱。)

我通过放弃并使用Ubuntu Live桌面CD(在具有光驱的计算机上)执行“创建USB驱动器”例程来解决此特定问题,然后USB安装就可以了。

但是我希望有某种方法可以从没有X服务器且没有光驱的Ubuntu系统的命令行中执行此操作,因此问题仍然存在。

有人知道吗?


尝试unetbootin。
RolandiXor

@Roland- unetbootin: cannot connect to X server 即使完全编写了脚本(unetbootin lang=en method=diskimage isofile=/srv/share/ubuntu-10.10-server-amd64.iso installtype=USB targetdrive=/dev/sdg1 autoinstall=yes),似乎也需要X ,而我宁愿保持无头。不过,谢谢你的小费;如果我用完了其他选件,则可以安装X。
jg-faustus

这些看起来很有希望:pendrivelinux.com/install-grub2-on-usb-from-ubuntu-linuxunix.stackexchange.com/questions/665/…需要一些调整,但可以尝试一下。
jg-faustus

@ jg-faustus:如果事情太复杂了,也许我会放弃linux。使用dd。它是一颗宝石。不能说足够。每个Linux发行版都有dd; 因此您拥有一个通用的解决方案,无需编写脚本/编写/配置。只是一条漂亮的线。
Mahesh

grub.cfg项需要说file=/cdrom/preseed/ubuntu-server.seedlinux线(不是file=(loop)/preseed/ubuntu-server.seed),以避免致命的“无法检索预配置文件”一旦CD映像已成功检测到的错误。
Paul Whittaker 2014年

Answers:


9

从USB引导时,这将为我提供Grub引导菜单并启动安装程序,但在几个屏幕抱怨找不到CD-ROM驱动器后,安装程序放弃了。

这是ubuntu服务器iso的一个已知错误(桌面iso可以正常工作),但是有一个修复程序可以从usb驱动器上的iso获取软件包:在安装程序中,一次按Ctrl + Alt + f2打开tty,然后在终点站:

mount -t vfat /dev/sdX1 /mnt
ln -sf /mnt/ubuntu-server.iso /dev/sr0

然后切换回安装程序,然后重试扫描cd以查找软件包。它应该工作。


我目前没有任何系统可以试用,但是是的-听起来应该可以:)谢谢!
jg-faustus

我发现“检测并安装CD-ROM”菜单选项将还原/dev/sr0,撤消ln并将其返回到其原始(损坏)状态。但是,如果我等待“重试安装CD-ROM?”。提示,ln在tty2中做了,然后返回按“是”,它确实起作用了。(不过,“重试?”对话框仅mount在发出命令后才会出现。)
Paul Whittaker 2014年

10

您尝试过#dd if=path/to/image.iso of=/dev/sd# 吗?


这是一颗宝石。最好的。适用于任何Linux发行版。但您需要格外小心。添加bs=20M或任何其他合适的值可以加快速度。有关详细信息,请参考man dd
Mahesh 2012年

1
@Mahesh不,即使使用此命令,某些linux发行版也无法使用,其中之一是OpenSUSE
Anwar

或MeeGo并将这些图像派生为混合图像
rzr13年

5

让我们假设您除了提示之前什么都没有。如果您有GUI,则可以打开终端并执行此处描述的所有操作。或者您可以使用tty。

警告:
为避免潜在的损坏,请非常小心地遵循说明。

  • 通过键入切换到根提示符 sudo su

    检测USB设备是什么。

  • tail -f /var/log/syslog

您现在可以在syslog上实时查看。插入USB驱动器。您应该在屏幕上看到一些消息。这样的事情。

May 27 00:35:07 Mahesh kernel: [ 5054.646585] usb 2-1.1: new high-speed USB device number 5 using ehci_hcd
May 27 00:35:07 Mahesh kernel: [ 5054.741437] scsi8 : usb-storage 2-1.1:1.0
May 27 00:35:07 Mahesh mtp-probe: checking bus 2, device 5: "/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1"
May 27 00:35:07 Mahesh mtp-probe: bus: 2, device: 5 was not an MTP device
May 27 00:35:08 Mahesh kernel: [ 5055.739177] scsi 8:0:0:0: Direct-Access     JetFlash TS2GJFV30        8.07 PQ: 0 ANSI: 2
May 27 00:35:08 Mahesh kernel: [ 5055.740198] sd 8:0:0:0: Attached scsi generic sg3 type 0
May 27 00:35:08 Mahesh kernel: [ 5055.741593] sd 8:0:0:0: [sdc] 4005888 512-byte logical blocks: (2.05 GB/1.91 GiB)
May 27 00:35:08 Mahesh kernel: [ 5055.742214] sd 8:0:0:0: [sdc] Write Protect is off
May 27 00:35:08 Mahesh kernel: [ 5055.742218] sd 8:0:0:0: [sdc] Mode Sense: 03 00 00 00
May 27 00:35:08 Mahesh kernel: [ 5055.742712] sd 8:0:0:0: [sdc] No Caching mode page present
May 27 00:35:08 Mahesh kernel: [ 5055.742715] sd 8:0:0:0: [sdc] Assuming drive cache: write through
May 27 00:35:08 Mahesh kernel: [ 5055.745326] sd 8:0:0:0: [sdc] No Caching mode page present
May 27 00:35:08 Mahesh kernel: [ 5055.745329] sd 8:0:0:0: [sdc] Assuming drive cache: write through
May 27 00:35:08 Mahesh kernel: [ 5055.781564]  sdc: sdc1
May 27 00:35:08 Mahesh kernel: [ 5055.784191] sd 8:0:0:0: [sdc] No Caching mode page present
May 27 00:35:08 Mahesh kernel: [ 5055.784196] sd 8:0:0:0: [sdc] Assuming drive cache: write through
May 27 00:35:08 Mahesh kernel: [ 5055.784200] sd 8:0:0:0: [sdc] Attached SCSI removable disk

看着它,在方括号中找到重复的一件事?sdc在这种情况下。记在一张纸上。键入Ctrl+ C进入提示。

找到iso文件刻录到USB。

如果iso文件位于/path/to/iso/somecd.iso; 在一张纸上记录此路径。

写入USB

警告:

这将擦除整个USB磁盘。备份后再继续。

  • dd if=/path/to/iso/somecd.iso of=/dev/sdc ibs=20M obs=20M

/path/to/iso/somecd.iso您的iso文件的实际路径替换。

替换/dev/sdc为您先前记下的所有内容。如果重复部分是sdb; 使用/dev/sdb等等。

警告:

错误地输入驱动器号将导致永久丢失其他驱动器上的数据。发出dd命令时要格外注意。


2
为了避免数据丢失,通过选择错误的磁盘,建议使用/dev/disk/by-label/LABEL,而不是/dev/sdc
托蒂

1
明智的建议。但是,当您不确定标签或有大量“新货”时,这会很麻烦。我总是更喜欢sdX,但这是个人选择。
Mahesh

1
最佳答案。建议的一项改进是在输入流上使用pv到dd,以便用户获得进度反馈(即pv读取iso,将其流到dd,并在stderr上显示进度)。
稳定狗2014年

2

从终端创建可启动的Ubuntu USB闪存驱动器

  • 挂载ubuntu.iso文件。为此,请在终端中运行以下命令,

    sudo mkdir /media/iso
    sudo mount -o loop /path/to/ubuntu.iso /media/iso
    
  • 然后将所有文件从中复制/media/iso到已安装的USB闪存驱动器文件夹中/media

    插入您的USB闪存驱动器。

    每当您插入它时,它都会自动安装。您的USB分区必须安装在内部/media。让我们假设您的USB驱动器安装在文件/media/xxxx夹中。然后运行以下命令,

    cp -a /media/iso/. /media/xxx
    

    运行lsblk命令以了解USB设备分区。

  • 然后将ldlinux.sys文件粘贴到USB闪存驱动器分区(在我的情况下为/ dev / sdd1)中,以使USB可启动。为此,请运行以下命令,

    sudo apt-get install syslinux mtools
    syslinux -s /dev/sdd1
    
  • 进入/media/xxx文件夹并将isolinux目录重命名为syslinux。然后进入重命名的syslinux文件夹并将文件重命名isolinux.cfgsyslinux.cfg

       mv /media/xxx/isolinux /media/xxx/syslinux
       mv /media/xxx/syslinux/isolinux.cfg /media/xxx/syslinux/syslinux.cfg
    
  • 重新启动电脑,然后将boot-orderBIOS 更改为USB。现在您的ubuntu USB闪存驱动器将启动,您可以安装它。

此方法适用于所有Linux发行版,不仅适用于ubuntu。


1

我通过使用Ubuntu Live桌面CD解决了这个特殊问题。

通过在具有光盘驱动器的计算机上引导Live CD,我可以使用Ubuntu桌面说明创建USB笔安装程序,而无需触摸现有安装。


1

您可以黑客usb-creator来做到这一点。

您应该已经有一个vfat分区作为usb设备上的分区1(usb-creator-gtk的擦除磁盘步骤已执行此操作),并且应将其标记为可引导。

接下来,我们将获得usb-creator python代码来帮助我们。

$ sudo apt-get install usb-creator

要么

$ bzr branch lp:usb-creator

创建具有此内容的文件并将其命名为usb-creator-cli,如果在最后一步中使用bzr,请将此文件放置在usb-creator目录(bzr分支的根目录)中

#!/usr/bin/env python
from __future__ import print_function
from usbcreator.misc import sane_path, setup_gettext, setup_logging, text_type

from usbcreator.install import install

sane_path()
setup_logging()
setup_gettext()

#/dev/sdb1 should be mounted on /mnt
#iso should be mounted to /iso
dev = '/dev/sdb1'
source = '/iso'
target = '/mnt' 
ugh = install(source, target, False, device=dev)
ugh.success = print
ugh.failure = print
ugh.progress = print
ugh.progress_message = print
ugh.progress_pulse = print
ugh.progress_pulse_stop = print
ugh.retry = print
ugh.run()

使它可执行

$ chmod +x usb-creator-cli

现在将iso挂载到/ iso并将USB设备挂载到/ mnt

$ sudo mkdir /iso ; sudo mount ubuntu-server-12.10-amd64.iso /iso
$ sudo mount /dev/sdb1 /mnt

如果您想在控制台上看到非常冗长的消息,则可以拖尾〜/ .cache / usb-creator.log

$ tail -f ~/.cache/usb-creator.log &

现在运行该usb-creator-cli脚本

$ sudo ./usb-creator-cli

并观看所有消息滚动。

当返回提示时,请不要在卸载USB存储设备之前先卸载/ mnt。


-2

您可以使用“替代安装”或“ Mini iso”(应该适合您的512mb棒)安装命令行(CLI)Ubuntu。

然后使用替代方法安装Crunchbang: http

您还可以尝试小于512mb的Lite版本的CrunchBang。

您可以使用Unetbootin准备USB记忆棒。


紧缩?哈哈?
RolandiXor

我在将ISO固定在记忆棒上时没有问题(16GB),更多的问题是如何创建一个USB记忆棒,该记忆棒首先会引导到ISO中,而仅使用CLI进行创建。
jg-faustus

不幸的是,unetbootin无效,即使从命令行运行它,似乎也需要图形支持。
jg-faustus
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.