Cross-platform disk/volume resolver — given a path, tells you which disk it's on, its mount point, and the relative path
Installation
As a library
[]
= "0.3"
As a CLI tool
CLI Usage
Resolve a path
# Resolve the current working directory
# Resolve a specific path
# Output as JSON
# Output as YAML
# Combine options
Default output:
device="/dev/disk3s5"
mount_point="/System/Volumes/Data"
relative_path="Users/user/Develop/personal/whichdisk"
JSON output (-o json):
List mounted volumes
# List all mounted volumes
# Shorthand
# Skip ejectable/removable volumes (show only internal disks)
# Skip non-ejectable volumes (show only removable disks)
# Output as JSON
# Output as YAML
Default output:
mount_point="/" device="/dev/disk3s1s1"
JSON output (list -o json):
Library Usage
Resolve a path to its disk
use resolve;
Get the root filesystem
use root;
List mounted volumes
use ;
Supported Platforms
| Platform | Resolve backend | List backend | Ejectable detection |
|---|---|---|---|
| macOS, iOS, watchOS, tvOS, visionOS | statfs via rustix |
NSFileManager via objc2-foundation |
NSURLVolumeIsEjectableKey / NSURLVolumeIsRemovableKey |
| FreeBSD, OpenBSD, DragonFlyBSD | statfs via rustix |
getmntinfo via libc |
/dev/da* or /dev/cd* device prefix |
| NetBSD | statvfs via libc |
getmntinfo via libc |
/dev/sd* or /dev/cd* device prefix |
| Linux | /proc/self/mountinfo parsing |
/proc/self/mountinfo parsing |
/dev/disk/by-id/usb-* |
| Windows | GetVolumePathNameW via windows-sys |
FindFirstVolumeW / FindNextVolumeW |
GetDriveTypeW = DRIVE_REMOVABLE |
Performance
- Thread-local cache — repeated lookups for paths on the same device skip the underlying syscall/file read entirely
- Small-buffer optimization — mount points and device names (typically < 56 bytes) are stored inline on the stack; longer values use reference-counted
bytes::Bytes(clone is a pointer copy) - SIMD-accelerated scanning — uses
memchrfor null-terminator and newline searches in the BSDstatfsbuffers and Linux mountinfo parsing
MSRV
The minimum supported Rust version is 1.85.
License
whichdisk is under the terms of both the MIT license and the
Apache License (Version 2.0).
See LICENSE-APACHE, LICENSE-MIT for details.
Copyright (c) 2026 Al Liu.