Skip to main content

Filesystem

Tips#

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
btrfsbtrfs-progs/btrfs-tools
exfat
ext2e2fsprogs
ext2e2fsprogs
ext2e2fsprogs
f2fsf2fs-tools
fat16dosfstools, mtools
fat32dosfstools, mtools
hfshfsutils
hfs+hfsutils
jfsjfsutils
swaputil-linux
lukscryptsetup, dmsetup
lvm2 pvlvm2
minixutil-linux
nilfs2nilfs-utils/nilfs-tools
ntfsntfs-3g/ntfsprogs
reiser4reiser4progs
reiserfsreiserfsprogs/reiserfs-utils
udfudftools
xfsxfsprogs, xfsdump

基准测试#

# /dev/zero 最快,但可能会被压缩time cat /dev/zero | head -c $((1024*1024*500)) > /dev/nullreal    0m0.439suser    0m0.026ssys 0m0.747s
# /dev/urandom 性能较慢time cat /dev/urandom | head -c $((1024*1024*500)) > /dev/nullreal    1m25.427suser    0m0.097ssys 1m25.713s
# openssl 随机数相对更快time openssl rand $((1024*1024*500)) | head -c $((1024*1024*500)) > /dev/nullreal    0m9.721suser    0m9.024ssys 0m1.284s
# 监控 IO 状况iostat -mx -d sda 1
dd bs=16M count=64 if=test of=test1 conv=fdatasync

常用操作#

# 可查看速度pv /home/user/bigfile.iso | md5sum# 8.25 后可查看进度dd if=/dev/urandom of=/dev/null status=progress# urandom 会限制速度,可以使用文件来测试truncat -s 10G test.datadd 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 下需要 INFOkill -INFO $(pgrep ^dd$)# 同上简单一点pkill -usr1 dd
# 将磁盘制作为镜像文件dd if=/dev/sdb of=./disk.img# 从文件恢复到磁盘dd if=./disk.img of=/dev/sdb
# 挂载 smb# Windows 共享无密码时使用 guestmount_smbfs //guest:[email protected]/share/ ~/mnt/share/# 或者挂载 cifs 也可以mount -t cifs -o username=guest,password=guest //192.168.8.1/share/ ~/mnt/share/
# 如果使用的环境没有相关的 linux 工具,可以考虑使用 dockerdocker run --rm -it --privileged -v /:/host ubuntu

diskutil#

OS X#

# 相当于 fdisk -ldiskutil list# umount 经常无法直接操作diskutil unmount /Volumes/<挂载名>diskutil unmountdisk /dev/disk2# 格式化磁盘diskutil eraseDisk HFS+ DISK disk2# 磁盘分区diskutil partitionDisk disk4 1 GPT HFS+ newdisk R
# 添加 ext 类磁盘操作工具brew install e2fsprogsls `brew --prefix e2fsprogs`/sbin

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.

http://superuser.com/questions/631592

文件时间#

时间缩写全称说明
atimeAccess Time访问时间
ctimeChange Time当访问权限等修改时,会修改该时间
mtimeModify Time当修改文件内容时会修改该时间
btimeBirth Time创建时间
windowslinuxsolarisdragonflynaclfreebsddarwinnetbsdopenbsdplan9
atime
mtime
ctime✓*
btimen/an/an/an/a
  • Windows XP 不支持 ctime, Vista 以上支持.
  • 可使用 stat 文件名 查看
  • 该表格摘自 djherbis/times
$ stat sg_store.db  File: 'sg_store.db'  Size: 45056           Blocks: 88         IO Block: 4096   regular fileDevice: 1000004h/16777220d      Inode: 45296478    Links: 1Access: (0644/-rw-r--r--)  Uid: (  501/   root)   Gid: (   20/   root)Access: 2016-09-22 15:26:54.000000000 +0800Modify: 2016-09-22 15:26:54.000000000 +0800Change: 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