Linux 下复制数据到 U 盘切记先正常弹出或卸载后再拔出

一、内容提要

使用过 Linux 的朋友可能会发现一个现象,那就是在 Linux 下有时往 U 盘里复制数据,不论是图形界面还是命令行下,貌似是极速的复制完成。不过,如果点击弹出U盘或 umount 卸载 U 盘,却会报告正有数据写入U盘,无法弹出或卸载。这时,如果强行拔出U盘,复制数据就会失败。而在 Windows 下面,基本上复制完毕点击弹出就可以弹出U盘。为什么会出现这种现象?如何在 Linux 下面正确的使用 U 盘?下面我以 VirtualBox 中的 Ubuntu 22.04 Linux 虚拟机为例,挂载一块实际的 4G 老U盘的 FAT32 和 NTFS 分区为例,在图形界面和命令行下演示一下具体的表现,并简要解释一下其中的原因和怎样让 U 盘复制数据的表现变得和 Windows 类似。视频演示地址:【Linux 下复制数据到 U 盘切记先正常弹出或卸载后再拔出】 https://www.bilibili.com/video/BV1Ta4y1B7X2/?share_source=copy_web&vd_source=d1925b070926f23b2b6676137251e9ea

Continue reading "Linux 下复制数据到 U 盘切记先正常弹出或卸载后再拔出"

CDlinux 0.6.2 安装

这是CDlinux 0.6.2 使用小结的第1篇,下一篇为:CDlinux 0.6.2 配置及软件安装

在这篇日记,我将根据自己的了解,向大家介绍一下怎样把CDlinux安装到硬盘,在用标准目录结构和定制目录结构的情况下怎样用Grub(Linux下的Grub或Windows下的Grub4dos)引导系统;怎样用Syslinux制作可引导U盘,把CDlinux安装到U盘上,编写syslinux.cfg配置文件引导系统;怎样在你定制了CDlinux后,重制CDROM ISO 映像等。
Continue reading "CDlinux 0.6.2 安装"

Ubuntu 下挂载U盘的3种方式

因为我需要在Ubuntu下挂载的U盘能够同步写操作,所以对Ubuntu 6.06 LTS下U盘(台电1G)的3种挂载大致实践了一下。这3种方式分别是:gnome下的自动挂载,pmount命令,在/etc/fstab中设定。

1、 gnome下的自动挂载
据搜索,gnome 下的自动挂载是利用hal(HAL, Hardware abstraction layer)实现的。只要把U盘插上,就会在桌面上出现一个 名为"usbdisk-1"的U盘图标。这种方式有两个地方可以进行相关设置。

一个地方是设置自动挂载时的相关参数,例如:同步写标志sync,不更改文件访问时间标志noatime等等。在文件“/etc/hal/fdi/policy/preferences.fdi“中设置。原来的所有设置都是注释掉了的,如果添加sync、noatime 标志需要修改这个文件。我在“match key="volume.size" compare_lt="1000000000"”这行走了点弯路,意思是小于1G就添加相应的参数。可是我没有注意到我的U盘实际上比这里的1G稍微大点(sudo fdisk -l /dev/sda 中查看),为1010826752字节,结果设置的参数不管用,无意中才发觉这个问题。最后干脆去掉这一个条件,只要是这种"storage.hotpluggable"和"storage.removable" 为"true"的都加上"sync"和"noatime"标志。

另一个地方是开始菜单中的“系统->首选项->可移动驱动器和介质”,把相应选项勾上。

不对“/etc/hal/fdi/policy/preferences.fdi”修改时的/etc/mtab相关内容如下:
/dev/sda1 /media/usbdisk-1 vfat rw,nosuid,nodev,quiet,shortname=mixed,uid=1000,gid=1000,umask=077,iocharset=utf8 0 0

添加了sync和noatime标志后的相关内容:
/dev/sda1 /media/usbdisk-1 vfat rw,nosuid,nodev,sync,noatime,quiet,shortname=mixed,uid=1000,gid=1000,umask=077,iocharset=utf8 0 0

挂载点 /media/usbdisk-1是自动的。

2、用pmount 命令
在不登录入桌面的情况下,另登录一个控制台,在命令行下输入命令 pmount -sA /dev/sda1 也可以挂载U盘,效果同添加了sync和noatime标志的gome下挂载是一样的。挂载点 /media/sda1是自动的。

查看 man pmount,可知它的默认挂载参数是: async,atime,nodev,noexec,noauto,nosuid,user,rw
如果在UTF-8的locale下utf8的iocharset是默认的。
另外,在man pmount 下提示在Debian下,使用pmount 的用户需在plugdev 系统组。不过,我的Ubuntu装好就把我的使用用户自动加入了这个组。

3、在/etc/fstab中设定
要达到上面的效果需要一大串参数,如下:
/dev/sda1 /media/flash vfat rw,nosuid,nodev,sync,noatime,quiet,shortname=mixed,uid=1000,gid=1000,umask=077,iocharset=utf8 0 0
然后: sudo mount /dev/sda1

4、注意:
当在/etc/fstab 中设置了/dev/sda1的挂载选项(不论是否已经确实挂载了),gnome下的挂载方式和pmount 命令都不起作用了,这两种方式可能都会去检查/etc/fstab文件;
当使用了gnome下的自动挂载方式或pmount 命令的挂载方式,那么,这两种方式中的另一种方式将不起作用。不过,这时手工的sudo mount /dev/sda1 -t vfat -o rw,nosuid,nodev,sync,noatime,quiet,shortname=mixed,uid=1000,gid=1000,umask=077,iocharset=utf8 /media/flash 却仍然可以用。