MacOS下制作linux启动盘

在Windows下,我们经常使用软碟通来制作各种系统的启动盘,那么在MacOS下,如何做到呢?MacOS跟Linux的做法基本一致。如果你只想快速地制作好启动盘,请看下面的快速版

首先,你需要以下两样东西:

  1. linux系统镜像
  2. 足够大的U盘

制作启动盘需要先确定U盘的设备名,建议先给U盘起个名字,然后查找U盘的设备路径。如下为/dev/disk5:

diskutil list
# /dev/disk5
# blabla... U盘名字

写入前,先卸载U盘

diskutil unmountDisk /dev/disk5

在制作之前,先介绍一个工具---dd。dd的基本用法如下:

# 将file1复制到file2中
dd if=file1 of=file2

ifof后面既可以是文件也可以是某个设备,dd是一种底层磁盘工具,非常适合制作启动盘,同时它也可以做一些有趣的事情,比如:

# 备份磁盘到文件
dd if=/dev/sda of=image.iso
# 从文件恢复到磁盘
dd if=image.iso of=/dev/sda
# 销毁某个设备的数据
dd if=/dev/urandom of=/dev/sda
# 修复磁盘的一些IO错误
dd if=/dev/sda of=/dev/sda

你肯定对第三条命令感到好奇,这是怎么做到的?其实linux定义了几种特殊的设备文件,/dev/urandom可以产生无穷无尽的随机值(不一定是通常意义的数字),所以这条命令的意思是向/dev/sda中写入随机值,某些时候会需要用到它。下面是linux的几种特殊的设备文件:

  • /dev/null
    这个设备文件就是一个无底洞,你可以向他写入任意大小的数据,但是写进去的数据全部都漏掉了,所以从他那里读数据只能读到EOF。
  • /dev/zero
    /dev/zero会给你无穷无尽的0,注意这里是ascii的\0,不是数字0。
  • /dev/random
    从真随机数产生器获得随机数,速度相对缓慢。
  • /dev/urandom
    从伪随机数产生器获取随机数,速度快。
  • /dev/full
    向这个设备写入时,会得到一个磁盘已满的错误。

下面我们正式制作启动盘

sudo dd if=1575868135818_ubuntu18.04-3.18.iso of=/dev/disk5 bs=1m

# 复制结束后,dd命令会打印出有多少输入块,有多少输出块,速度如何
# 出现以下提示表示成功
# 1934+1 records in
# 1934+1 records out
# 2028060672 bytes transferred in 641.515462 secs (3161359 bytes/sec)

完成后,就可以拿来装系统了。

插曲

在我美美地安装好ubuntu之后,发生了一个小插曲。我的PC是SSD+1T机械盘的组合,通常我都把系统装到SSD,用户数据放机械盘,所以我惯常的做法是把/home放到机械盘,但是我安装系统的时候忘了这事。那怎么手动把/home挂载到其他磁盘分区呢?

# 挂载目标分区(假设你需要挂载到 /dev/sdb1)
sudo mkdir /mnt/tmp
sudo mount /dev/sdb1 /mnt/tmp

# 复制数据(此时的 /mnt/tmp 就是 /dev/sdb1)
sudo rsync -avx /home/ /mnt/tmp

# 删除旧的/home
rm -rf /home/*  
# 必要的话,卸载原来的/home(这里一般都不需要,除非你的/home本来就是另放在某个磁盘分区的)
umount -l /home

# 挂载新的/home
sudo mount /dev/sdb1 /home

# 查 /dev/sdb1 的UUID和TYPE
sudo blkid

sudo vim /etc/fstab
# 在文件里添加以下内容
UUID=175ab25f-5190-4df7-8795-8a00a0f78fd6 /home           ext4    defaults      0       2

# 验证下,ok
df -h

看到这里,也许你会有两个疑问:

1、这里复制的时候用了rsync命令。为何不用cp和上文提到的dd呢?以下是我的理解:

  • dd
    dd是一种非常底层的复制命令,一般用于拷贝整个磁盘到镜像,或者从镜像写入到磁盘。dd命令通常比较危险,也被称为disk destroyer。

  • cp
    这是一种常用的命令,一般我们复制一些小的文件和文件夹都是使用它

  • rsync
    rsync是高级的复制命令,更多地用于远程同步。如果你要复制大文件,用rsync比cp好。dd命令也很适合拷贝大文件,但是如果你要备份你的/目录,rsync比dd更合适,因为rsync可以更灵活地控制哪些文件可以需要复制,哪些可以被忽略。

2、/etc/fstab是什么?

​ 在linux里,一切都是文件,设备可以是文件,配置也可以是文件,你想修改系统配置,一般都是修改相应的文件,/etc/fstab就是linux系统的一个配置文件,主要用来配置各种设备如何挂载到系统,你在这里定义好挂载方式,系统启动的时候就会自动帮你挂载好。

快速版

# 建议先给你的U盘起个名,然后找到你U盘的设备名,如 /dev/disk5
diskutil list
# /dev/disk5 (internal, physical):
#   #:                       TYPE NAME                    SIZE       IDENTIFIER
#   0:      GUID_partition_scheme                        *121.3 GB   disk0
#   1:                        EFI EFI                     209.7 MB   disk0s1
#   2:                 Apple_APFS U盘名字                  121.1 GB   disk0s2
   
# 卸载设备
diskutil unmountDisk /dev/disk5
# 写入镜像
sudo dd if=1575868135818_ubuntu18.04-3.18.iso of=/dev/disk5 bs=1m

# 出现以下提示表示成功
# 1934+1 records in
# 1934+1 records out
# 2028060672 bytes transferred in 641.515462 secs (3161359 bytes/sec)

# 成功!此时如果系统报错,识别不了U盘,不用管,快去装你的linux吧!

Reference

Debian Linux手册

ArchWiki Rsync

ArchWiki Fstab

posted @ 2019-12-14 22:14  濯缨  阅读(1742)  评论(0编辑  收藏  举报