Ubuntu巡航记(1) -- 在Windows作业系统下安装Ubuntu

前言

机器学习的套件许多都不能在Windows作业系统内顺利安装,就算能安装也要费一番手脚,因此,兴起安装Linux作业系统的念头,经过一天的努力,总算搞定,期间发生差点开不了机,惨烈的过程与大家分享一下。
Windows作业系统有内建Sub Linux子系统 -- WSL,安装很简单,本来寄望它可以拿来测试,使用之後发现几个缺点:

  1. 无法安装GPU驱动程序/CUDA工具箱:深度学习套件非有不可,否则速度会慢到怀疑人生。
  2. 无视窗介面:虽然可以安装X-Windows,不过有点复杂。
  3. Docker测试:想要看看Linux的性能。

听说 Windows 11 WSL 可以解决第1、2项问题。

安装程序

可以参考『制作USB开机随身碟』说明,补充如下:

  1. 先准备一支USB随身碟,快速格式化。

  2. 使用Unetbootin制作Ubuntu安装软件:自Unetbootin官网下载Unetbootin档案,并开始执行。
    https://ithelp.ithome.com.tw/upload/images/20210930/20001976DclhVsX47p.png

  3. Unetbootin可指定Linux种类与版本,不过此选向下载速度很慢,建议先自Ubuntu官网下载ISO档,我选择Desktop版本,在Unetbootin画面中选第二个选项。

  4. 插入外接硬碟,重开机:我使用SSD。

  5. 在BIOS中指定USB随身碟开机:开机後选择安装Ubuntu,以外接硬碟为目标,过程需要很久,有时候会停顿,感觉已当机,需耐心等候。安装时选择所有更新选项,会自动将网路及GPU驱动程序一并安装妥当。

  6. 安装完成後会要求重新启动,此时把USB随身碟抽出,开机就会自动进入Ubuntu作业系统。因为,安装Ubuntu时,会同时安装GRUB boot loader,接管开机程序,它提供多重开机选单。

  7. 要改变开机选单,可以参考这一篇,修改组态档,sudo gedit /boot/grub/grub.cfg,我将set default="0" 改为 "2",预设为Windows作业系统开机。

後来安装Kalid,造成系统 Crash,误以为外接硬碟过热,故改用已经在使用中的硬碟,另切割一个Parition,安装Ubuntu,安装时遇到两个问题:

  1. “No Root File System is Defined” 错误: 我先在 Windows 中「磁碟管理」中压缩硬碟,将外接硬碟挤出 1TB 的空间,之後试图在安装时指定该Partition为安装位置,结果就出现“No Root File System is Defined” 错误,参考这一篇,采用 method 1,解决问题。
  2. 再次重新安装,又碰到「partition table must reserved bios boot area」错误:参考这一篇,进入BIOS将CSM disable,变成EFI Only,解决问题。

安装Kalid造成系统 Crash的详情请参阅『Ubuntu巡航记(5) -- Kaldi 安装』

注意事项

因 Ubuntu 可能只是偶而使用,会想要把外接硬碟移除,在此状况下开机,会出现 GRUB>,无选单,这时须输入 exit,才能进入 Windows作业系统。

我选择安装Ubuntu v20.04,GPU卡只能安装CUDA Toolkit v10.1,造成TensorFlow 只能安装 v2.3.4版。

如果要移除GRUB boot loader,可参考这两篇:

  1. Remove GRUB bootloader from Windows 10
  2. How To Remove GRUB for Windows 10 Bootloader

不过,我还没有尝试过。

安装中文输入法

中文输入法的软件有很多种,安装说明也非常多,莫衷一是,终於找到一篇可行的方法,请参考这一篇,使用 fcitx,安装指令如下:
sudo apt-get install fcitx fcitx-chewing

按 CTRL+Space 切换中、英文输入模式,Shift可输入全形标点符号。

相关操作可参考IT事件簿-ubuntu16.04安装新酷音输入法


<<:  建立第一个RESTful api server(连结资料库篇)-2 (Day18)

>>:  KingRoot

Day10 | Dart 非同步 - async/awiat

Async/Awiat 在Dart中我们可以使用 async 来代表这是一个非同步的function...

与Arduino接起来

前面提到Raspberry pi有哪些传输方式 IIC/SPI/1-wire/UART 书上建议可以...

Day 27 建立 Switch

实作 import React, { useState } from 'react'; import...

Day03 - 端到端(end-to-end)语音辨识

在前一天的最後有提到说透过类神经网路(DNN)使得从输入端到输出端只透过一个模型就完成语音辨识,像这...

Kotlin 语言和你 SAY HELLO!!

第十一天 各位点进来的朋友,你们好阿 因为我还是新手不能够直接回覆,所以在这边回覆前两篇的留言。 第...