<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Storage on Matty Spangler</title>
    <link>https://mattyspangler.codeberg.page/tags/storage/</link>
    <description>Recent content in Storage on Matty Spangler</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Sat, 07 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://mattyspangler.codeberg.page/tags/storage/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Encrypted BTRFS Storage on Kicksecure</title>
      <link>https://mattyspangler.codeberg.page/posts/kicksecure-btrfs-storage/</link>
      <pubDate>Sat, 07 Mar 2026 00:00:00 +0000</pubDate>
      
      <guid>https://mattyspangler.codeberg.page/posts/kicksecure-btrfs-storage/</guid>
      <description>&lt;p&gt;This article is part of my &lt;a href=&#34;../kicksecure-self-hosting/&#34;&gt;Self-Hosting with Kicksecure&lt;/a&gt; series. It assumes you&amp;rsquo;ve already set up &lt;a href=&#34;../kicksecure-etckeeper/&#34;&gt;Etckeeper GitOps on Kicksecure&lt;/a&gt; so all configuration changes are tracked from the beginning.&lt;/p&gt;
&lt;h2 id=&#34;1-introduction&#34;&gt;1. Introduction&lt;/h2&gt;
&lt;p&gt;I needed encrypted storage for my container data. I decided to use a 4TB SSD with BTRFS for system backups and services that don&amp;rsquo;t require huge amounts of data. For services that require a lot like Nextcloud, I put them on a ZFS RAID 10 array with 4x 8TB HDDs.&lt;/p&gt;</description>
      <content>&lt;p&gt;This article is part of my &lt;a href=&#34;../kicksecure-self-hosting/&#34;&gt;Self-Hosting with Kicksecure&lt;/a&gt; series. It assumes you&amp;rsquo;ve already set up &lt;a href=&#34;../kicksecure-etckeeper/&#34;&gt;Etckeeper GitOps on Kicksecure&lt;/a&gt; so all configuration changes are tracked from the beginning.&lt;/p&gt;
&lt;h2 id=&#34;1-introduction&#34;&gt;1. Introduction&lt;/h2&gt;
&lt;p&gt;I needed encrypted storage for my container data. I decided to use a 4TB SSD with BTRFS for system backups and services that don&amp;rsquo;t require huge amounts of data. For services that require a lot like Nextcloud, I put them on a ZFS RAID 10 array with 4x 8TB HDDs.&lt;/p&gt;
&lt;p&gt;My requirements for the BTRFS storage were:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Encryption at rest&lt;/strong&gt; - If someone steals the drive, they can&amp;rsquo;t read it&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automount at boot&lt;/strong&gt; - Using a keyfile so the server starts unattended&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Subvolumes&lt;/strong&gt; - Separate container data for easier snapshots&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compression&lt;/strong&gt; - Save space where possible&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;2-identifying-the-drive&#34;&gt;2. Identifying the Drive&lt;/h2&gt;
&lt;p&gt;First, I identified my target drive by reviewing the size column from the &lt;code&gt;lsblk&lt;/code&gt; command. In this case, my device was sdb.&lt;/p&gt;
&lt;p&gt;Then got its device ID for reliable reference across reboots:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ls -l /dev/disk/by-id/ | grep sdb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I saw entries like:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ata-CT4000BX500SSD1_XXXXXXXXXXXX -&amp;gt; ../../sdb
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I used the &lt;code&gt;ata-&lt;/code&gt; prefixed ID—it&amp;rsquo;s more reliable than &lt;code&gt;/dev/sdb&lt;/code&gt; since the latter mapping can be subject to change.&lt;/p&gt;
&lt;h2 id=&#34;3-creating-luks-encryption&#34;&gt;3. Creating LUKS Encryption&lt;/h2&gt;
&lt;p&gt;Create the LUKS container:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cryptsetup luksFormat --type luks2 /dev/sdb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It prompted me to create a passphrase.&lt;/p&gt;
&lt;p&gt;Then I unlocked the encrypted container:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cryptsetup open /dev/sdb storage_crypt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This created &lt;code&gt;/dev/mapper/storage_crypt&lt;/code&gt;, a path that allows for accessing the unlocked container.&lt;/p&gt;
&lt;h2 id=&#34;4-creating-btrfs-filesystem&#34;&gt;4. Creating BTRFS Filesystem&lt;/h2&gt;
&lt;p&gt;I created a BTRFS filesystem on the encrypted container:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkfs.btrfs -L &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;StorageName&amp;#34;&lt;/span&gt; /dev/mapper/storage_crypt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The output showed filesystem details including UUID and features like &lt;code&gt;extref&lt;/code&gt;, &lt;code&gt;skinny-metadata&lt;/code&gt;, &lt;code&gt;no-holes&lt;/code&gt;, and &lt;code&gt;free-space-tree&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;5-creating-subvolumes&#34;&gt;5. Creating Subvolumes&lt;/h2&gt;
&lt;p&gt;I mounted temporarily to create subvolumes:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir /mnt/storage_name
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mount /dev/mapper/storage_crypt /mnt/storage_name
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Created a subvolume for data:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;btrfs subvolume create /mnt/storage_name/@gitea_data
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;BTRFS allows you to perform rollbacks on subvolumes by creating snapshots. When you snapshot a subvolume, BTRFS doesn&amp;rsquo;t copy all the data, it only records new changes. You can snapshot terabytes of data in seconds, and the snapshot only takes up space for the actual differences.&lt;/p&gt;
&lt;p&gt;By organizing data into separate subvolumes like &lt;code&gt;@jellyfin_data&lt;/code&gt;, &lt;code&gt;@nextcloud_data&lt;/code&gt;, &lt;code&gt;@homeassistant_data&lt;/code&gt;, and &lt;code&gt;@gitea_data&lt;/code&gt;, I can make snapshots that act independently for my different podman services. This makes it easy to roll back a single container&amp;rsquo;s data without affecting others.&lt;/p&gt;
&lt;p&gt;I unmounted when I was done with the mount:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;umount /mnt/storage_name
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;6-keyfile-for-automount&#34;&gt;6. Keyfile for Automount&lt;/h2&gt;
&lt;p&gt;I want to unlock the drive automatically at boot rather than always entering the passphrase. I start by creating a keyfile with random data in it:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dd &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/dev/urandom of&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/root/storage.key bs&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; count&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;32&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;chmod &lt;span style=&#34;color:#ae81ff&#34;&gt;400&lt;/span&gt; /root/storage.key
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I added it to LUKS so that it can be used to unlock:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cryptsetup luksAddKey /dev/sdb /root/storage.key
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I entered my original passphrase when prompted.&lt;/p&gt;
&lt;h2 id=&#34;7-configuring-crypttab&#34;&gt;7. Configuring crypttab&lt;/h2&gt;
&lt;p&gt;Got the LUKS UUID:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cryptsetup luksUUID /dev/sdb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Backed up the existing crypttab:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cp /etc/crypttab /etc/crypttab.old
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Added the encrypted drive to &lt;code&gt;/etc/crypttab&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;storage_crypt UUID=YOUR_DISK_UUID /root/storage.key luks,nofail,discard&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; /etc/crypttab
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The options explained:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;luks&lt;/code&gt; - Use LUKS encryption&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nofail&lt;/code&gt; - Boot continues if the drive fails to unlock&lt;/li&gt;
&lt;li&gt;&lt;code&gt;discard&lt;/code&gt; - Enable TRIM for SSDs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;9-configuring-fstab&#34;&gt;9. Configuring fstab&lt;/h2&gt;
&lt;p&gt;Added the BTRFS mount to &lt;code&gt;/etc/fstab&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/dev/mapper/storage_crypt /mnt/storage_name btrfs defaults,nofail,compress=zstd,noatime,subvol=@data 0 0&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; /etc/fstab
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;defaults&lt;/code&gt; - Standard mount options&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nofail&lt;/code&gt; - Boot continues if mount fails&lt;/li&gt;
&lt;li&gt;&lt;code&gt;compress=zstd&lt;/code&gt; - Transparent compression (good balance of speed and ratio)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;noatime&lt;/code&gt; - Don&amp;rsquo;t update access times (improves performance)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;subvol=@data&lt;/code&gt; - Mount the @data subvolume I created&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;10-testing&#34;&gt;10. Testing&lt;/h2&gt;
&lt;p&gt;Reloaded systemd and tested the mount:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl daemon-reload
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mount -a
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Verified it mounted:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lsblk
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I saw my encrypted container mounted at &lt;code&gt;/mnt/storage_name&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;11-permissions&#34;&gt;11. Permissions&lt;/h2&gt;
&lt;p&gt;Set ownership for the container user:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;chown -R user:user /mnt/storage_name
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;chmod &lt;span style=&#34;color:#ae81ff&#34;&gt;770&lt;/span&gt; /mnt/storage_name
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;12-creating-additional-subvolumes&#34;&gt;12. Creating Additional Subvolumes&lt;/h2&gt;
&lt;p&gt;As I added more services, I created separate subvolumes:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mount /dev/mapper/storage_crypt /mnt/storage_name
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;btrfs subvolume create /mnt/storage_name/@gitea_data
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;btrfs subvolume create /mnt/storage_name/@cache
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;umount /mnt/storage_name
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then added additional fstab entries or adjusted container volume mounts.&lt;/p&gt;
&lt;h2 id=&#34;13-btrfs-snapshots&#34;&gt;13. BTRFS Snapshots&lt;/h2&gt;
&lt;p&gt;One advantage of BTRFS is easy snapshots. I create snapshots before upgrades:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;btrfs subvolume snapshot /mnt/storage_name/@data /mnt/storage_name/@data-backup-&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;date +%Y%m%d&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;14-troubleshooting&#34;&gt;14. Troubleshooting&lt;/h2&gt;
&lt;h3 id=&#34;drive-doesnt-mount-at-boot&#34;&gt;Drive Doesn&amp;rsquo;t Mount at Boot&lt;/h3&gt;
&lt;p&gt;Check if the keyfile path is correct in &lt;code&gt;/etc/crypttab&lt;/code&gt;. It must be accessible during early boot.&lt;/p&gt;
&lt;p&gt;Check journal logs:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;journalctl -xe
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;wrong-subvolume-mounted&#34;&gt;Wrong Subvolume Mounted&lt;/h3&gt;
&lt;p&gt;If you&amp;rsquo;re not seeing your data, check that &lt;code&gt;/etc/fstab&lt;/code&gt; includes &lt;code&gt;subvol=@data&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;permission-denied-for-containers&#34;&gt;Permission Denied for Containers&lt;/h3&gt;
&lt;p&gt;If containers can&amp;rsquo;t write, check ownership:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ls -la /mnt/storage_name
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For Podman containers, I use &lt;code&gt;podman unshare chown&lt;/code&gt; to set container-internal UIDs.&lt;/p&gt;
&lt;h2 id=&#34;15-whats-next&#34;&gt;15. What&amp;rsquo;s Next&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;../kicksecure-podman-permissions/&#34;&gt;Podman Permissions on Kicksecure&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
  </channel>
</rss>
