diff --git a/data/op-mode-standardized.json b/data/op-mode-standardized.json
index e120336f3..2d6f6da41 100644
--- a/data/op-mode-standardized.json
+++ b/data/op-mode-standardized.json
@@ -1,15 +1,16 @@
 [
 "bridge.py",
 "conntrack.py",
 "container.py",
 "cpu.py",
 "memory.py",
 "nat.py",
 "neighbor.py",
 "openconnect.py",
 "route.py",
 "ipsec.py",
+"storage.py",
 "uptime.py",
 "version.py",
 "vrf.py"
 ]
diff --git a/op-mode-definitions/show-system.xml.in b/op-mode-definitions/show-system.xml.in
index 6962ad374..bd32992aa 100644
--- a/op-mode-definitions/show-system.xml.in
+++ b/op-mode-definitions/show-system.xml.in
@@ -1,177 +1,177 @@
 <?xml version="1.0"?>
 <interfaceDefinition>
   <node name="show">
     <children>
       <node name="system">
         <properties>
           <help>Show system information</help>
         </properties>
         <children>
           <node name="connections">
             <properties>
               <help>Show active network connections on the system</help>
             </properties>
             <command>netstat -an</command>
             <children>
               <node name="tcp">
                 <properties>
                   <help>Show TCP connection information</help>
                 </properties>
                 <command>ss -t -r</command>
                 <children>
                   <leafNode name="all">
                     <properties>
                       <help>Show all TCP connections</help>
                     </properties>
                     <command>ss -t -a</command>
                   </leafNode>
                   <leafNode name="numeric">
                     <properties>
                       <help>Show TCP connection without resolving names</help>
                     </properties>
                     <command>ss -t -n</command>
                   </leafNode>
                 </children>
               </node>
               <node name="udp">
                 <properties>
                   <help>Show UDP socket information</help>
                 </properties>
                 <command>ss -u -a -r</command>
                 <children>
                   <leafNode name="numeric">
                     <properties>
                       <help>Show UDP socket information without resolving names</help>
                     </properties>
                     <command>ss -u -a -n</command>
                   </leafNode>
                 </children>
               </node>
             </children>
           </node>
           <leafNode name="cpu">
             <properties>
               <help>Show CPU information</help>
             </properties>
             <command>${vyos_op_scripts_dir}/cpu.py show</command>
           </leafNode>
           <leafNode name="kernel-messages">
             <properties>
               <help>Show messages in kernel ring buffer</help>
             </properties>
             <command>sudo dmesg</command>
           </leafNode>
           <node name="login">
             <properties>
               <help>Show user accounts</help>
             </properties>
             <children>
               <node name="users">
                 <properties>
                   <help>Show user account information</help>
                 </properties>
                 <command>${vyos_libexec_dir}/vyos-sudo.py ${vyos_op_scripts_dir}/show_users.py</command>
                 <children>
                   <leafNode name="all">
                     <properties>
                       <help>Show information about all accounts</help>
                     </properties>
                     <command>${vyos_libexec_dir}/vyos-sudo.py ${vyos_op_scripts_dir}/show_users.py all</command>
                   </leafNode>
                   <leafNode name="locked">
                     <properties>
                       <help>Show information about locked accounts</help>
                     </properties>
                     <command>${vyos_libexec_dir}/vyos-sudo.py ${vyos_op_scripts_dir}/show_users.py locked</command>
                   </leafNode>
                   <leafNode name="other">
                     <properties>
                       <help>Show information about non VyOS user accounts</help>
                     </properties>
                     <command>${vyos_libexec_dir}/vyos-sudo.py ${vyos_op_scripts_dir}/show_users.py other</command>
                   </leafNode>
                   <leafNode name="vyos">
                     <properties>
                       <help>Show information about VyOS user accounts</help>
                     </properties>
                     <command>${vyos_libexec_dir}/vyos-sudo.py ${vyos_op_scripts_dir}/show_users.py vyos</command>
                   </leafNode>
                 </children>
               </node>
             </children>
           </node>
           <node name="memory">
             <properties>
               <help>Show system memory usage</help>
             </properties>
             <command>${vyos_op_scripts_dir}/memory.py show</command>
             <children>
               <leafNode name="cache">
                 <properties>
                   <help>Show kernel cache information</help>
                 </properties>
                 <command>sudo slabtop -o</command>
               </leafNode>
               <leafNode name="detail">
                 <properties>
                   <help>Show detailed system memory usage</help>
                 </properties>
                 <command>cat /proc/meminfo</command>
               </leafNode>
               <leafNode name="routing-daemons">
                 <properties>
                   <help>Show memory usage of all routing protocols</help>
                 </properties>
                 <command>vtysh -c "show memory"</command>
               </leafNode>
             </children>
           </node>
           <node name="processes">
             <properties>
               <help>Show system processes</help>
             </properties>
             <command>ps ax</command>
             <children>
               <leafNode name="extensive">
                 <properties>
                   <help>Show extensive process info</help>
                 </properties>
                 <command>top -b -n1</command>
               </leafNode>
               <leafNode name="summary">
                 <properties>
                   <help>Show summary of system processes</help>
                 </properties>
                 <command>${vyos_op_scripts_dir}/uptime.py show</command>
               </leafNode>
               <leafNode name="tree">
                 <properties>
                   <help>Show process tree</help>
                 </properties>
                 <command>ps -ejH</command>
               </leafNode>
             </children>
           </node>
           <leafNode name="routing-daemons">
             <properties>
               <help>Show Quagga routing daemons</help>
             </properties>
             <command>vtysh -c "show daemons"</command>
           </leafNode>
           <leafNode name="storage">
             <properties>
               <help>Show filesystem usage</help>
             </properties>
-            <command>df -h -x squashfs</command>
+            <command>${vyos_op_scripts_dir}/storage.py show</command>
           </leafNode>
           <leafNode name="uptime">
             <properties>
               <help>Show system uptime and load averages</help>
             </properties>
             <command>${vyos_op_scripts_dir}/uptime.py show</command>
           </leafNode>
         </children>
       </node>
     </children>
   </node>
 </interfaceDefinition>
diff --git a/src/op_mode/storage.py b/src/op_mode/storage.py
new file mode 100755
index 000000000..75964c493
--- /dev/null
+++ b/src/op_mode/storage.py
@@ -0,0 +1,60 @@
+#!/usr/bin/env python3
+#
+# Copyright (C) 2022 VyOS maintainers and contributors
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 or later as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+import sys
+
+import vyos.opmode
+from vyos.util import cmd
+
+
+def _get_system_storage(only_persistent=False):
+    if not only_persistent:
+        cmd_str = 'df -h -x squashf'
+    else:
+        cmd_str = 'df -h -t ext4 --output=source,size,used,avail,pcent'
+
+    res = cmd(cmd_str)
+
+    return res
+
+def _get_raw_data():
+    out =  _get_system_storage(only_persistent=True)
+    lines = out.splitlines()
+    lists = [l.split() for l in lines]
+    res = {lists[0][i]: lists[1][i] for i in range(len(lists[0]))}
+
+    return res
+
+def _get_formatted_output():
+    return _get_system_storage()
+
+def show(raw: bool):
+    if raw:
+        return _get_raw_data()
+
+    return _get_formatted_output()
+
+
+if __name__ == '__main__':
+    try:
+        res = vyos.opmode.run(sys.modules[__name__])
+        if res:
+            print(res)
+    except (ValueError, vyos.opmode.Error) as e:
+        print(e)
+        sys.exit(1)
+