WIMMOUNT(1)

✨ WIMMOUNT(1) ✨

okay bestie, sit down, we're talking about wimmount, wimmountrw and wimunmount β€” the trio that lets you mount a WIM image like it's a real filesystem. This is the User Commands corner of the manual, and honestly? It's giving magic. πŸ’…


πŸŽ€ NAME πŸŽ€

wimmount, wimmountrw, wimunmount β€” mount or unmount a WIM image πŸ¦‹


🌸 SYNOPSIS 🌸

wimmount WIMFILE [IMAGE] DIRECTORY [OPTION...]
wimmountrw WIMFILE [IMAGE] DIRECTORY [OPTION...]
wimunmount DIRECTORY [OPTION...]

πŸ’– DESCRIPTION πŸ’–

So here's the tea. On Linux, the wimmount command (which is literally the same thing as wimlib-imagex mount, no cap) and the wimmountrw command (same energy as wimlib-imagex mountrw) mount the IMAGE you specified inside the Windows Imaging (WIM) archive WIMFILE onto the directory DIRECTORY, using FUSE (Filesystem in Userspace). wimmount mounts it read-only, while wimmountrw mounts it read-write. πŸ”₯

IMAGE tells you which image inside WIMFILE to mount. It can be the 1-based index of an image, or the name of an image. And if WIMFILE only has one image in it? You can just... not say it. Omitted, bestie. If you wanna see what images live inside WIMFILE, go run wiminfo(1). πŸ‘‘

To unmount the WIM image you use wimunmount (aka wimlib-imagex unmount). And here's the part that matters: changes made to a read-write mounted image will be DISCARDED unless you pass the --commit flag to wimunmount. So don't come crying to me when your edits vanish, because I warned you. 😭


πŸ¦‹ DATA AND METADATA SUPPORT πŸ¦‹

WIM images can hold a whole variety of file types and file metadata, and some of it is very Windows-specific. Right now, the mount feature can translate some Windows concepts into Linux equivalents, but not all of them. Briefly, here's what's supported (read/write):

  • Hard links πŸ”—
  • Symbolic links. Native Windows symbolic links and junctions sitting in a mounted WIM image get automatically translated into UNIX symbolic links, possibly with their targets fixed so they're actually valid given the real mountpoint directory. And UNIX symbolic links you create in a read-write mounted WIM image get automatically translated into native Windows symbolic links. ✨
  • Named data streams (mostly). See the --streams-interface option.

Plus, standard UNIX file permissions (owner, group, and mode) and special files are supported if you use the --unix-data option. 🫢

But now the sad part. The following features are unsupported and just not exposed in mounted images:

  • Windows security descriptors. New files don't get security descriptors. πŸ’€
  • DOS names (8.3 names) (short names). New files don't get DOS names.
  • Windows file attributes. New files get default attributes based on the UNIX file mode bits.
  • Object IDs. New files don't get object IDs.
  • EFS-encrypted files. The files themselves will be visible in mounted WIM images, but their data will not be available. πŸ™ˆ
  • Extended attributes. Even though wimlib supports WIM images that contain extended attributes, these are not yet exposed in mounted WIM images. (This may be implemented in the future, though it would conflict with the use of extended attributes to expose Windows concepts like named data streams.)

🌈 SPLIT WIMS 🌈

You can use wimmount to mount an image from a split WIM, but read-only only. You may not mount an image from a split WIM read-write. Periodt.

The WIMFILE argument has to specify the first part of the split WIM, and the additional parts of the split WIM get specified in one or more --ref="GLOB" options. Since globbing is built into the --ref option, typically you only need one --ref option. For example, the names for the split WIM parts usually go something like:

mywim.swm
mywim2.swm
mywim3.swm
mywim4.swm
mywim5.swm

To mount the first image of this split WIM to the directory "dir", run:

wimmount mywim.swm 1 dir --ref="mywim*.swm"

πŸ’œ NOTES πŸ’œ

Availability: Mounting WIM images is only supported on Linux-based systems. These commands will not work on other platforms, sorry. And also, the library cannot have been configured --without-fuse. 🧚

Multiple mounts: You are free to mount many WIM images at the same time β€” the only rule is that there can't be two images mounted read-write from the same file at the same time. Slay responsibly. πŸ‘‘

Appends vs. rebuilds: By default, changes to a read-write WIM are made in-place by appending to the WIM. This is nice for big WIM files, since the entire file doesn't have to be rebuilt just to make a small change. But if you're making many changes to a read-write mounted WIM β€” especially deleting large files β€” it's suggested to provide the --rebuild option to wimunmount to force the WIM to be rebuilt, or else run wimoptimize afterwards. 🧹

ESD files (solid WIMs): You can mount version 3584 WIMs, which usually contain LZMS-compressed solid resources and may carry the .esd file extension rather than .wim. However, such files are not designed for random access, so reading data from them while mounted may be very slow. 😴 In addition, .esd files downloaded directly by the Windows 8 web downloader have encrypted segments, and wimlib cannot mount such files until they are first decrypted.


🌟 MOUNT OPTIONS 🌟

  • --check β€” Before mounting the WIM image, verify the integrity of the WIM, if it contains extra integrity information. βœ…
  • --streams-interface=INTERFACE β€” This option is inspired by the ntfs-3g(8) filesystem driver. It controls how named data streams (also called "alternate data streams") in WIM files are made available.

If "none", it will be impossible to read or write the named data streams. 🚫

If "xattr" (default), named data streams will be accessible through extended file attributes β€” unless this support was disabled when compiling wimlib. The named data streams may be accessed through extended attributes named "user.*", where the * is the name of the named data stream. See setfattr(1) and getfattr(1). Note that this is not an ideal interface, since named data streams may be larger than the maximum allowed extended attribute size. 😬

If "windows", the named data streams will be accessible by specifying the filename, then a colon, then the name of the named data stream; for example, "myfile:mystream". πŸͺŸ

  • --debug β€” Turn on debugging information printed by the FUSE library, and do not fork into the background. πŸ›
  • --ref="GLOB" β€” File glob of additional WIMs or split WIM parts to reference resources from. See SPLIT_WIMS. This option can be specified multiple times. Note: GLOB is listed in quotes because it is interpreted by wimlib-imagex and may need to be quoted to protect against shell expansion. 🐚
  • --staging-dir=DIR β€” Store temporary staging files in a subdirectory of the directory DIR. Only valid for wimmountrw.
  • --unix-data β€” Honor UNIX-specific metadata that was captured by wimcapture with the --unix-data option. By default, wimmount (and wimmountrw) will ignore both Windows-style security descriptors and UNIX-specific metadata. In this default mode, all files will simply be owned by the user running wimmount and will have mode 0777. (They will still not be accessible to other users unless you also specify --allow-other.) If you instead provide the --unix-data option, these default permissions will be overridden on a per-file basis with the UNIX-specific metadata from the WIM image when available, and in the case of wimmountrw it will also be possible to change the UNIX permissions on files in the mounted image using the standard UNIX tools and functions, and (if appropriately privileged) create UNIX special files such as device nodes. πŸ’…
  • --allow-other β€” Pass the allow_other option to the FUSE mount. See mount.fuse(8). Note: to do this as a non-root user, user_allow_other needs to be specified in /etc/fuse.conf. 🫢

πŸŽ€ UNMOUNT OPTIONS πŸŽ€

  • --commit β€” Update the WIM file with the changes that have been made. Has no effect if the mount is read-only. πŸ’Ύ
  • --force β€” In combination with --commit, force the WIM image to be committed even if there are open file descriptors to the WIM image. Any such file descriptors will be immediately closed, and the WIM image will be committed and unmounted. 😳
  • --check β€” If committing changes to the WIM, include extra integrity information, even if it was not present before. βœ…
  • --rebuild β€” Rebuild the entire WIM rather than appending any new data to the end of it. Rebuilding the WIM is slower, but will save a little bit of space that would otherwise be left as a hole in the WIM. Even more space will be saved if the read-write mount resulted in streams being deleted from the WIM. Also see
  • --new-image β€” In combination with --commit for a read-write mounted image, causes the modified image to be committed as a new, unnamed image appended to the WIM archive. The original image will be unmodified. πŸ¦‹

πŸ’€ IMPLEMENTATION DETAILS πŸ’€

Since a WIM is an archive and not a filesystem per se, wimmountrw creates a temporary staging directory to contain files that are created or modified. This directory is located in the same directory as WIMFILE by default, but the location can be set using the --staging-dir option. When the filesystem is unmounted with --commit, the WIM is modified in-place (or rebuilt completely with --rebuild), merging in the staging files as needed. Then, the temporary staging directory is deleted. 🧹✨

wimunmount runs in a separate process from the process that previously ran wimmount. When unmounting a read-write mounted WIM image with --commit, these two processes communicate using a POSIX message queue so that the unmount process can track the progress of the mount process. See src/mount_image.c in the source code for details. πŸ“¬


πŸ”₯ SEE ALSO πŸ”₯

wimlib-imagex(1)


and that's the whole page, bestie πŸ’– go mount something, you're doing amazing. This was wimlib 1.14.5, dated January 2026 β€” thanks for reading, mwah πŸŽ€βœ¨πŸ¦‹

πŸ“¦ where this page comes from