Index: uspace/app/vol/vol.c
===================================================================
--- uspace/app/vol/vol.c	(revision 5fc82448bbd01f2950b893989095ed4c1b1c99b3)
+++ uspace/app/vol/vol.c	(revision 9dfb034217589be7992cb9cfcfb4fd044520541d)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2017 Jiri Svoboda
+ * Copyright (c) 2025 Jiri Svoboda
  * All rights reserved.
  *
@@ -36,4 +36,5 @@
 #include <io/table.h>
 #include <loc.h>
+#include <stdbool.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -107,5 +108,5 @@
 }
 
-static errno_t vol_cmd_eject(const char *volspec)
+static errno_t vol_cmd_eject(const char *volspec, bool physical)
 {
 	vol_t *vol = NULL;
@@ -125,5 +126,6 @@
 	}
 
-	rc = vol_part_eject(vol, part_id);
+	rc = vol_part_eject(vol, part_id, physical ? vef_physical :
+	    vef_none);
 	if (rc != EOK) {
 		printf("Error ejecting volume.\n");
@@ -323,10 +325,11 @@
 {
 	printf("Syntax:\n");
-	printf("  %s                List present volumes\n", NAME);
-	printf("  %s -c             List volume configuration entries\n", NAME);
-	printf("  %s -h             Print help\n", NAME);
-	printf("  %s eject <mp>     Eject volume mounted in a directory\n", NAME);
-	printf("  %s insert <svc>   Insert volume based on service identifier\n", NAME);
-	printf("  %s insert -p <mp> Insert volume based on filesystem path\n", NAME);
+	printf("  %s                 List present volumes\n", NAME);
+	printf("  %s -c              List volume configuration entries\n", NAME);
+	printf("  %s -h              Print help\n", NAME);
+	printf("  %s eject [-s] <mp> Eject volume mounted in a directory\n", NAME);
+	printf("                     -s to eject physically\n");
+	printf("  %s insert <svc>    Insert volume based on service identifier\n", NAME);
+	printf("  %s insert -p <mp>  Insert volume based on filesystem path\n", NAME);
 }
 
@@ -336,4 +339,5 @@
 	char *volspec;
 	vol_cmd_t vcmd;
+	bool physical = false;
 	int i;
 	errno_t rc = EINVAL;
@@ -351,4 +355,9 @@
 		} else if (str_cmp(cmd, "eject") == 0) {
 			vcmd = vcmd_eject;
+			if (str_cmp(argv[i], "-s") == 0) {
+				physical = true;
+				++i;
+			}
+
 			if (argc <= i) {
 				printf("Parameter missing.\n");
@@ -382,5 +391,5 @@
 	switch (vcmd) {
 	case vcmd_eject:
-		rc = vol_cmd_eject(volspec);
+		rc = vol_cmd_eject(volspec, physical);
 		break;
 	case vcmd_insert:
