Wener Notes

Filesystem

约 4 分钟阅读
N/AMinixExtExt2Xia
Max FS size64 MB2 GB 4 TB 2 GB
Max file size64 MB2 GB 2 GB 64 MB
Max file name16/30 c255 c255 c248 c
3 times supportNoNoYesYes
ExtensibleNoNoYesNo
Var. block sizeNoNoYesNo
fscreategrowshrinkmovecopychecklabeluuidpkgs
btrfs✅✅✅✅✅✅✅✅btrfs-progs/btrfs-tools
exfat❌❌❌✅✅❌❌❌
ext2✅✅✅✅✅✅✅✅e2fsprogs
ext2✅✅✅✅✅✅✅✅e2fsprogs
ext2✅✅✅✅✅✅✅✅e2fsprogs
f2fs✅✅❌✅✅✅❌❌f2fs-tools
fat16✅✅✅✅✅✅✅✅dosfstools, mtools
fat32✅✅✅✅✅✅✅✅dosfstools, mtools
hfs✅❌✅✅✅❌❌❌hfsutils
hfs+✅❌✅✅✅✅❌❌hfsutils
jfs✅✅❌✅✅✅✅✅jfsutils
swap✅✅❌✅✅❌✅✅util-linux
luks❌✅❌✅✅❌❌❌cryptsetup, dmsetup
lvm2 pv✅✅✅✅✅✅✅✅lvm2
minix✅❌❌✅✅✅❌❌util-linux
nilfs2✅✅✅✅✅❌✅✅nilfs-utils/nilfs-tools
ntfs✅✅✅✅✅❌✅✅ntfs-3g/ntfsprogs
reiser4✅❌❌✅✅✅❌❌reiser4progs
reiserfs✅✅✅✅✅✅✅✅reiserfsprogs/reiserfs-utils
udf✅❌❌✅✅❌✅✅udftools
xfs✅✅❌✅✅✅✅✅xfsprogs, xfsdump

基准测试

bash
# /dev/zero 最快,但可能会被压缩
time cat /dev/zero | head -c $((1024*1024*500)) > /dev/null
real	0m0.439s
user	0m0.026s
sys	0m0.747s

# /dev/urandom 性能较慢
time cat /dev/urandom | head -c $((1024*1024*500)) > /dev/null
real	1m25.427s
user	0m0.097s
sys	1m25.713s

# openssl 随机数相对更快
time openssl rand $((1024*1024*500)) | head -c $((1024*1024*500)) > /dev/null
real	0m9.721s
user	0m9.024s
sys	0m1.284s

# 监控 IO 状况
iostat -mx -d sda 1

dd bs=16M count=64 if=test of=test1 conv=fdatasync

常用操作

bash
# 可查看速度
pv /home/user/bigfile.iso | md5sum
# 8.25 后可查看进度
dd if=/dev/urandom of=/dev/null status=progress
# urandom 会限制速度,可以使用文件来测试
truncat -s 10G test.data
dd if=test.data of=/dev/null status=progress
# 似乎会更快
pv < /dev/sda > /dev/sdb
# 使用 PV 监控速度
dd if=/dev/urandom | pv | dd of=/dev/null
# 简单一点
pv bigfile.iso | dd of=VirtualDisk.raw
# 在 DD 执行以后也可以查看进度
kill -USR1 $(pgrep ^dd)
watch -n5 'kill -USR1 $(pgrep ^dd)'
# 在 BSD/MAC 下需要 INFO
kill -INFO $(pgrep ^dd$)
# 同上简单一点
pkill -usr1 dd

# 将磁盘制作为镜像文件
dd if=/dev/sdb of=./disk.img
# 从文件恢复到磁盘
dd if=./disk.img of=/dev/sdb

# 挂载 smb
# Windows 共享无密码时使用 guest
mount_smbfs //guest:[email protected]/share/ ~/mnt/share/
# 或者挂载 cifs 也可以
mount -t cifs -o username=guest,password=guest //192.168.8.1/share/ ~/mnt/share/

# 如果使用的环境没有相关的 linux 工具,可以考虑使用 docker
docker run --rm -it --privileged -v /:/host ubuntu

diskutil

OS X

bash
# 相当于 fdisk -l
diskutil list
# umount 经常无法直接操作
diskutil unmount /Volumes/<挂载名>
diskutil unmountdisk /dev/disk2
# 格式化磁盘
diskutil eraseDisk HFS+ DISK disk2
# 磁盘分区
diskutil partitionDisk disk4 1 GPT HFS+ newdisk R

# 格式化为 exfat
diskutil eraseDisk ExFAT MyUSB /dev/disk6

# 添加 ext 类磁盘操作工具
brew install e2fsprogs
ls `brew --prefix e2fsprogs`/sbin

特殊特性

  • rename2
    • overlay 依赖
    • zfs 尚不支持
  • clone
    • zfs 尚不支持

FAQ

disk vs rdisk on BSD

man hdiutil

/dev/rdisk nodes are character-special devices, but are "raw" in the BSD sense and force block-aligned I/O. They are closer to the physical disk than the buffer cache. /dev/disk nodes, on the other hand, are buffered block-special devices and are used primarily by the kernel's filesystem code.

即 rdisk 几乎是直接访问物理设备,disk 还会经过系统缓存.在能使用 rdisk 时不使用 disk.

superuser.com/questions/631592

文件时间

时间缩写全称说明
atimeAccess Time访问时间
ctimeChange Time当访问权限等修改时,会修改该时间
mtimeModify Time当修改文件内容时会修改该时间
btimeBirth Time创建时间
windowslinuxsolarisdragonflynaclfreebsddarwinnetbsdopenbsdplan9
atime✓✓✓✓✓✓✓✓✓✓
mtime✓✓✓✓✓✓✓✓✓✓
ctime✓*✓✓✓✓✓✓✓✓
btime✓n/an/an/an/a✓✓✓
bash
$ stat sg_store.db
  File: 'sg_store.db'
  Size: 45056          	Blocks: 88         IO Block: 4096   regular file
Device: 1000004h/16777220d     	Inode: 45296478    Links: 1
Access: (0644/-rw-r--r--)  Uid: (  501/   root)   Gid: (   20/   root)
Access: 2016-09-22 15:26:54.000000000 +0800
Modify: 2016-09-22 15:26:54.000000000 +0800
Change: 2016-09-22 15:27:20.000000000 +0800
 Birth: 2016-09-21 23:05:30.000000000 +0800

# 修改 mtime 和 ctime
$ touch sg_store.db
# 修改 ctime
$ chown root:root sg_store.db

关联信息

反向链接、本文链接的其他页面和外部资料。

References

GitHub2 条
Wikipedia5 条
Hacker News2 条
其他外链7 条
最近更新commit 4eabdc2Edit

On this page