# Windows 10/7与Ubuntu 18.04双系统安装

> 作者：zning（https://ning.ae） · 发布：2019/07/13 18:26 下午 (UTC+8) · 原文：https://zning.me/15630136084061.html

> 本文涉及配置主要是深度学习方向的，如有个性化需求可以阅读参考文献以及自行再搜索文章尝试。
 
最近需要学习深度学习的同时混一混Kaggle社区，所以部署Kaggle Docker以便环境上一致，因此需要安装Ubuntu以便环境的部署。因此需要在已有Windows 10的带有GPU台式机上安装双系统来部署，为了方便以后有使用需求，现简单总结下双系统的安装情况。

> 注意：本文首次撰写于2019-07-13，最近修改时间为2019-07-13，请注意相关程序的可用性与安全性。

<!-- -->

> 本文也在Windows 7下进行安装并通过，也可通过此文进行Windows 7+ Ubuntu 18.04的安装。

## 安装准备

安装需要准备镜像、刻录镜像软件和容量可观的U盘。
1. 镜像下载：[点击此处可以直接下载Ubuntu 18.04 LTS](http://mirrors.njupt.edu.cn/ubuntu-releases/18.04.2/ubuntu-18.04.2-desktop-amd64.iso)
2. 刻录镜像软件软件：此处选用UltraISO（软碟通）。当然有其他的也可以。
3. U盘：只要别拿出个几百M一两G的U盘，其他都能用。**U盘刻录需要格式化，请使用空闲U盘。**

软碟通刻录镜像至U盘，在Windows下以管理员方式打开后，打开镜像文件，选择启动-写入硬盘映像，选择插入的U盘，点选入即可。

如果操作有问题请自行搜索解决方法，本文不再赘述。

## 安装过程

我这里以一块新的SSD进行的安装，为保持一致，SSD已通过PE转为UEFI引导，如果是同一块硬盘的未分配存储也是可以的。

BIOS引导进入安装U盘，选择“Install Ubuntu”，然后选择语言、测试键盘。如果是有无线模块的电脑，这几步之后会让你选择是否连接无线，我们可以暂时不连接。

![1121563028394_.pi-w497](media/15630136084061/1121563028394_.pic.jpg)

![1111563028393_.pi-w497](media/15630136084061/1111563028393_.pic.jpg)

![1101563028392_.pi-w497](media/15630136084061/1101563028392_.pic.jpg)

![1091563028391_.pi-w497](media/15630136084061/1091563028391_.pic.jpg)

在更新和其他软件页面，选择正常安装，并且**不要勾选**“为图形或无线硬件，以及其他媒体格式安装第三方软件”。

![1131563028959_.pi-w497](media/15630136084061/1131563028959_.pic.jpg)

接下来就是安装类型了，如果机器已经有预装Windows的情况下会提示如图所示内容。这里我们选择其它选项。

![1081563028390_.pi-w497](media/15630136084061/1081563028390_.pic.jpg)

> 注意：在本文的参考文献1中，博主认为不应该选择此项而应该选择第一项，并且吐槽别人选择其它选项是不对的。其实这里的情况是，**如果选择第一项，那么Ubuntu将根据探测引导结果通过程序自动进行挂载点的选择与引导的添加，这与我们需要个性化定制挂载点的需求相违背。而其它选项中需要指定引导挂载点为存量系统（这里是Windows 10）已有的引导挂载点才可以**，下文将详细说明。

在下面的挂载点，我们根据磁盘的情况进行挂载。**选择空闲的分区（一般肉眼就能看出是哪块盘），然后双击或者点击左下角加号，输入大小、分区类型和挂载点即可。**

这里的挂载点就有讲究了。如果各位搜网上各种说法的话，什么swap啊boot啊挂载点各种出来了。但是，**都9102年了，GPT逐步替代MBR的时代都过去七八年了，UEFI引导淘汰BIOS引导都成为了主流，笔记本电脑动辄都16G内存了，为什么各种教程还是写`/boot`啊`/swap`啊一堆挂载点？除了浪费空间还是浪费空间！**

对于挂载点我的建议是：

1. 内存如果超过16G，且不是作为服务器，只是作为个人用途的，swap无需设置。内存如果小于4G，可以考虑设置内存相同大小的swap。内存如果在4G-16G区间，根据需求自行设定大小或无需设定。
2. BIOS引导需要设定500M-1024M左右的boot挂载点，UEFI引导不需要设置boot挂载点。
3. 独立SSD硬盘安装Ubuntu可设定200M的EFI引导挂载点。若已安装Windows也可以不设定EFI挂载点，只在设定最下面“安装启动引导器的设备”选到Windows Boot Manager分区即可。
4. `/home`挂载点和`/`挂载点需要设定，根据自己情况设定。例如我需要未来部署Kaggle Docker，所以设定`/home`挂载点15G，其余空间全部分配给`/`挂载点。

分区及挂载点设置好后，记得最下面的“安装启动引导器的设备”选择正确，设定EFI引导挂载点的需要选择对应分区挂载点，未设定的请选择列表中标示“Windows Boot Manager”的分区挂载点。否则安装后系统找不到引导无法启动Ubuntu。

![屏幕截图 2019-07-13 21.44.01-w497](media/15630136084061/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202019-07-13%2021.44.01.png)

> 上图摘自网络

接下来就是选择时区和设定主机名和用户名啦，没啥特别注意的按照自己需求个性化设定就好啦。

![1071563028389_.pi-w497](media/15630136084061/1071563028389_.pic.jpg)

![1061563028388_.pi-w497](media/15630136084061/1061563028388_.pic.jpg)

然后就是重启，选择Ubuntu就可以进入系统咯~

## 安装结束

1. 双系统切换：

    先设定下`/etc/default/grub`：
    
    ```shell
    sudo vim /etc/default/grub
    ```

    打开后，修改`GRUB_DEFAULT`字段，这个是修改默认启动项的，正常应该是`GRUB_DEFAULT=0`。即默认是Ubuntu启动。如果我们想改成默认Windows，可以在启动时观察grub中Windows启动项在哪一个记一下，然后改一下就好了。比如我的Windows启动项在grub启动菜单中显示为第3个，那么这里改为`GRUB_DEFAULT=2`即可。
    
    当然，还有个特殊的选项叫`GRUB_DEFAULT=saved`，按照如下设置后，每次你手动选择的启动项都会设置为下次开机默认的选项：
    
    ```shell
    GRUB_DEFAULT=saved
    GRUB_SAVEDEFAULT=true
    ```
    
    设置好后，运行如下命令写入grub使设置生效：
    
    ```shell
    sudo update-grub
    ```

    如果有远程需求的，可以按照如下经验来做：
    
    1. 设置`GRUB_DEFAULT=saved`。
    2. 编辑个脚本放在用户目录下并授予执行权限：

        ```shell
        #!/bin/bash
        sudo grub-reboot 2
        sudo reboot
        ```
    需要切换到Windows的时候就运行这个脚本就行了。

1. 开启远程SSH：

    查看当前的ubuntu是否安装了ssh-server服务。默认只安装ssh-client服务。
    
    ```shell
    dpkg -l | grep ssh
    ```
    
    若没有``，则说明没有安装ssh-server。安装ssh-server服务

    ```shell
    sudo apt-get install -y openssh-server
    ```
    
    确认ssh-server是否启动了，默认安装之后就会启动：

    ```shell
    ps -e | grep ssh
    ```
    
    如果看到sshd那说明ssh-server已经启动了，如果没有则可以运行如下命令启动：
    
    ```shell
    sudo /etc/init.d/ssh start或sudo service ssh start
    ```
 
    ssh-server配置文件位于`/etc/ssh/sshd_config`，在这里可以定义SSH的服务端口，默认端口是22，你可以自己定义成其他端口号，如`222`。

    把配置文件中的`PermitRootLogin without-password`在最前面加一个`#`，把它注释掉，再增加一句`PermitRootLogin yes`。

    然后重启SSH服务：

    ```shell
    sudo /etc/init.d/ssh stop 
    sudo /etc/init.d/ssh start
    ```

## 问题解决

1. 安装完之后，我的电脑出现了如果上一次登录过Ubuntu的话，再进入Windows 10发现时间出现问题。经过搜索后发现是Ubuntu和Windows 10对BIOS时间的解析理解不同。具体解决方案请点击[《解决Windows 10与Ubuntu 18.04双系统机器上Windows时间同步有误的问题》](./15630143637063.html)。

## 参考文献

1. [Windows10+Ubuntu18.04双系统安装成功心得（理清网上杂乱无章的教程）](https://blog.csdn.net/lnfxbianxiu/article/details/80394284)
2. [win10下安装Ubuntu16.04双系统](https://blog.csdn.net/s717597589/article/details/79117112)
3. [win10下Ubuntu 双系统安装（解决关机卡死问题和WiFi问题）](https://blog.csdn.net/weixin_44585583/article/details/90704452)
4. [Windows + Ubuntu 16.04 双系统安装详细教程](https://blog.csdn.net/flyyufenfei/article/details/79187656)
5. [ubuntu开启SSH服务远程登录](https://blog.csdn.net/jackghq/article/details/54974141)
