fixed site
This commit is contained in:
+569
@@ -0,0 +1,569 @@
|
||||
<!doctype html>
|
||||
<html
|
||||
lang="de-DE"
|
||||
dir="ltr"
|
||||
class="h-full">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta name="language" content="de-DE">
|
||||
<script>
|
||||
|
||||
(function () {
|
||||
const storedTheme = localStorage.getItem("theme");
|
||||
const systemPrefersLight = window.matchMedia("(prefers-color-scheme: light)").matches;
|
||||
const theme = storedTheme || (systemPrefersLight ? "light" : "dark");
|
||||
document.documentElement.setAttribute("data-theme", theme);
|
||||
})();
|
||||
</script>
|
||||
<title>Dovecot Index Cache Issues | Demians Blog</title>
|
||||
<meta
|
||||
name="description"
|
||||
content="
|
||||
Understanding dovecot.index.cache I recently migrated an old mail server system into its new home. After the migration, I checked the logs and noticed some …
|
||||
|
||||
">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="canonical" href="https://pyte.dev/posts/dovecot-index-cache-issues/">
|
||||
|
||||
<meta name="robots" content="index, follow">
|
||||
|
||||
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:title" content="Dovecot Index Cache Issues | Demians Blog">
|
||||
<meta property="og:description" content="Understanding dovecot.index.cache I recently migrated an old mail server system into its new home. After the migration, I checked the logs and noticed some …">
|
||||
<meta property="og:url" content="https://pyte.dev/posts/dovecot-index-cache-issues/">
|
||||
<meta property="og:site_name" content="Demians Blog"><meta property="og:image" content="https://pyte.dev/assets/patrick.png">
|
||||
<meta property="og:image:width" content="1200">
|
||||
<meta property="og:image:height" content="630"><meta property="article:published_time" content="2025-05-18T11:34:09+02:00">
|
||||
<meta
|
||||
property="article:modified_time"
|
||||
content="2025-05-18T11:34:09+02:00">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Dovecot Index Cache Issues | Demians Blog">
|
||||
<meta name="twitter:description" content="Understanding dovecot.index.cache I recently migrated an old mail server system into its new home. After the migration, I checked the logs and noticed some …"><meta name="twitter:image" content="https://pyte.dev/assets/patrick.png">
|
||||
|
||||
<script type="application/ld+json">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"author\":{\"@type\":\"Person\",\"email\":\"demian (at) pyte (dot) dev\",\"name\":\"Demians Blog\"},\"dateModified\":\"2025-05-18T11:34:09+02:00\",\"datePublished\":\"2025-05-18T11:34:09+02:00\",\"description\":\"Understanding dovecot.index.cache I recently migrated an old mail server system into its new home. After the migration, I checked the logs and noticed some …\",\"headline\":\"Dovecot Index Cache Issues\",\"image\":\"https://pyte.dev/assets/patrick.png\",\"mainEntityOfPage\":{\"@id\":\"https://pyte.dev/posts/dovecot-index-cache-issues/\",\"@type\":\"WebPage\"},\"publisher\":{\"@type\":\"Organization\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://pyte.dev/assets/patrick.png\"},\"name\":\"Demians Blog\"}}"</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script type="application/ld+json">"{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"item\":\"https://pyte.dev/\",\"name\":\"Demians Blog\",\"position\":1},{\"@type\":\"ListItem\",\"item\":\"https://pyte.dev/posts/\",\"name\":\"Posts\",\"position\":2},{\"@type\":\"ListItem\",\"item\":\"https://pyte.dev/posts/dovecot-index-cache-issues/\",\"name\":\"Dovecot Index Cache Issues\",\"position\":3}]}"</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link
|
||||
href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&family=Outfit:wght@400;500;600;700;800;900&family=Space+Grotesk:wght@400;500;600;700&display=swap"
|
||||
rel="stylesheet">
|
||||
|
||||
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="/css/theme.min.86a32b729f656fc6c119ed69193950db815a3ad9fdc967b32c76d602f11449a4.css"
|
||||
integrity="sha256-hqMrcp9lb8bBGe1pGTlQ24FaOtn9yWezLHbWAvEUSaQ=">
|
||||
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="/css/syntax-dark.min.3e403a03e3af837b3829e9b6f01fc7792bda7cb7f5056f5e9786109545c6b2e1.css"
|
||||
integrity="sha256-PkA6A+Ovg3s4Kem28B/HeSvafLf1BW9el4YQlUXGsuE="
|
||||
id="syntax-dark-theme"
|
||||
class="syntax-theme"><link
|
||||
rel="stylesheet"
|
||||
href="/css/syntax-light.min.d0d33b879698595e6b2c0f75f0cea95a8517fb0150570cd0ee4dc42e25c8d147.css"
|
||||
integrity="sha256-0NM7h5aYWV5rLA918M6pWoUX+wFQVwzQ7k3ELiXI0Uc="
|
||||
id="syntax-light-theme"
|
||||
class="syntax-theme"
|
||||
disabled><script>
|
||||
|
||||
(function () {
|
||||
const storedTheme = localStorage.getItem("theme");
|
||||
const systemPrefersLight = window.matchMedia("(prefers-color-scheme: light)").matches;
|
||||
const theme = storedTheme || (systemPrefersLight ? "light" : "dark");
|
||||
|
||||
const syntaxDark = document.getElementById("syntax-dark-theme");
|
||||
const syntaxLight = document.getElementById("syntax-light-theme");
|
||||
|
||||
if (theme === "light") {
|
||||
if (syntaxDark) syntaxDark.disabled = true;
|
||||
if (syntaxLight) syntaxLight.disabled = false;
|
||||
} else {
|
||||
if (syntaxDark) syntaxDark.disabled = false;
|
||||
if (syntaxLight) syntaxLight.disabled = true;
|
||||
}
|
||||
|
||||
|
||||
const observer = new MutationObserver(() => {
|
||||
const currentTheme = document.documentElement.getAttribute("data-theme");
|
||||
if (currentTheme === "light") {
|
||||
if (syntaxDark) syntaxDark.disabled = true;
|
||||
if (syntaxLight) syntaxLight.disabled = false;
|
||||
} else {
|
||||
if (syntaxDark) syntaxDark.disabled = false;
|
||||
if (syntaxLight) syntaxLight.disabled = true;
|
||||
}
|
||||
});
|
||||
|
||||
observer.observe(document.documentElement, {
|
||||
attributes: true,
|
||||
attributeFilter: ["data-theme"],
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="/css/bundle.min.783a79746a859af9be598cbc33fba2a1087434b23768524277b07ef28336f113.css"
|
||||
integrity="sha256-eDp5dGqFmvm+WYy8M/uioQh0NLI3aFJCd7B+8oM28RM=">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
||||
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
|
||||
|
||||
<link rel="icon" type="image/png" href="/favicon.png">
|
||||
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/favicon/logo-transparent/favicon-32x32.png">
|
||||
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/favicon/logo-transparent/favicon-16x16.png">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/favicon/logo-transparent/apple-touch-icon.png">
|
||||
<link
|
||||
rel="icon"
|
||||
type="image/png"
|
||||
sizes="192x192"
|
||||
href="/favicon/logo-transparent/android-chrome-192x192.png">
|
||||
<link
|
||||
rel="icon"
|
||||
type="image/png"
|
||||
sizes="512x512"
|
||||
href="/favicon/logo-transparent/android-chrome-512x512.png">
|
||||
<link rel="manifest" href="/favicon/logo-transparent/site.webmanifest">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
<body class="flex flex-col min-h-screen">
|
||||
<a href="#main-content" class="skip-to-main" aria-label="Skip to main content"
|
||||
>Skip to main content</a
|
||||
>
|
||||
<header class="sticky-header">
|
||||
<div class="header-container">
|
||||
<nav class="header-nav" role="navigation" aria-label="Main navigation">
|
||||
<div class="header-content">
|
||||
<div class="header-logo">
|
||||
<a href="/" class="logo-link" aria-label="Home - Demians Blog">
|
||||
Demians Blog
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="header-menu">
|
||||
<ul class="menu-list">
|
||||
|
||||
<li class="menu-item">
|
||||
<a
|
||||
href="/"
|
||||
class="menu-link ">
|
||||
Home
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="menu-item">
|
||||
<a
|
||||
href="/posts/"
|
||||
class="menu-link ">
|
||||
Blog
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
<button id="search-toggle" class="search-toggle" aria-label="Search" type="button">
|
||||
<svg class="search-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path>
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
<button id="theme-toggle" class="theme-toggle" aria-label="Toggle theme" type="button">
|
||||
<svg class="icon-sun" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"></path>
|
||||
</svg>
|
||||
<svg class="icon-moon" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"></path>
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main id="main-content" class="flex-1" role="main">
|
||||
|
||||
<div class="single-post-wrapper">
|
||||
<article class="single-post">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<header class="post-header">
|
||||
<h1 class="post-title-main">Dovecot Index Cache Issues</h1>
|
||||
|
||||
|
||||
|
||||
<div class="post-meta">
|
||||
<div class="post-meta-info">
|
||||
<time datetime="2025-05-18T11:34:09+02:00" class="post-date">
|
||||
<svg class="meta-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"></path>
|
||||
</svg>
|
||||
May 18, 2025
|
||||
</time>
|
||||
|
||||
<span class="meta-separator">•</span>
|
||||
|
||||
|
||||
<span class="post-word-count">
|
||||
<svg class="meta-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"></path>
|
||||
</svg>
|
||||
592 words
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
<span class="meta-separator">•</span>
|
||||
<span class="post-reading-time">
|
||||
<svg class="meta-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"></path>
|
||||
</svg>
|
||||
3 min
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</header>
|
||||
|
||||
<div class="post-content-main">
|
||||
<h1 id="understanding-dovecotindexcache">Understanding <code>dovecot.index.cache</code></h1>
|
||||
<p>I recently migrated an old mail server system into its new home. After the migration, I checked the logs and noticed some warnings that looked like this:</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gdscript3" data-lang="gdscript3"><span class="line"><span class="cl"><span class="n">May</span> <span class="mi">17</span> <span class="mi">11</span><span class="p">:</span><span class="mi">23</span><span class="p">:</span><span class="mi">13</span> <span class="n">server1</span> <span class="n">dovecot</span><span class="p">:</span> <span class="n">dsync</span><span class="o">-</span><span class="n">local</span><span class="p">(</span><span class="n">user</span><span class="err">@</span><span class="n">domain</span><span class="o">.</span><span class="n">tld</span><span class="p">)</span><span class="o"><</span><span class="n">cRjZCwGnKWiIvicA2dm5Tw</span><span class="o">></span><span class="p">:</span> <span class="n">Error</span><span class="p">:</span> <span class="n">Mailbox</span> <span class="n">INBOX</span><span class="p">:</span> <span class="n">mmap</span><span class="p">(</span><span class="n">size</span><span class="o">=</span><span class="mi">511310568</span><span class="p">)</span> <span class="n">failed</span> <span class="n">with</span> <span class="n">file</span> <span class="o">/</span><span class="k">var</span><span class="o">/</span><span class="n">vmail</span><span class="o">/</span><span class="n">domain</span><span class="o">.</span><span class="n">tld</span><span class="o">/</span><span class="n">user</span><span class="o">/</span><span class="n">Maildir</span><span class="o">/</span><span class="n">dovecot</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">cache</span><span class="p">:</span> <span class="n">Cannot</span> <span class="n">allocate</span> <span class="n">memory</span>
|
||||
</span></span></code></pre></div><p>The error indicates that the <code>dovecot.index.cache</code> file is too big to process, and Dovecot cannot allocate enough memory to handle it.</p>
|
||||
<h1 id="what-are-dovecotindexcache-files">What Are <code>dovecot.index.cache</code> Files?</h1>
|
||||
<p>Dovecot, the most popular IMAP server, uses a set of index files (<code>dovecot.index</code>, <code>dovecot.index.cache</code>, <code>dovecot.index.log</code>, etc.) to speed up mailbox access. The file I had to deal with stores cached message metadata (headers, flags, and preview text) so Dovecot does not have to read each message file in the mailbox every time.</p>
|
||||
<p>Over time, the <code>dovecot.index.cache</code> file can grow very large or become outdated. Here are a few reasons why this happens:</p>
|
||||
<h3 id="during-normal-operation">During Normal Operation</h3>
|
||||
<ul>
|
||||
<li>Deleted or moved messages may leave behind unused metadata.</li>
|
||||
<li>Corrupt or unreferenced entries might accumulate if a process is interrupted.</li>
|
||||
<li>Stale data can hang around for years if not explicitly purged.</li>
|
||||
</ul>
|
||||
<h3 id="after-a-migration">After a Migration</h3>
|
||||
<p>Migrations are particularly prone to creating out-of-sync or bloated index files because:</p>
|
||||
<ul>
|
||||
<li><strong>File timestamps and UIDs change</strong>: Dovecot’s cache is based on assumptions about message state. A migration (e.g. via <code>rsync</code> or <code>imapsync</code>) may change those assumptions, causing the cache to mismatch the actual message data.</li>
|
||||
<li><strong>Index format/version mismatch</strong>: If you switch Dovecot versions between servers, the format of <code>.index.cache</code> might be incompatible or inefficient.</li>
|
||||
<li><strong>Partial cache rebuilds</strong>: After a migration, Dovecot may try to reuse old cache files that no longer reflect the real contents of the mailbox, leading to odd behavior or performance issues.</li>
|
||||
</ul>
|
||||
<h1 id="how-to-deal-with-these-files">How to Deal with These Files</h1>
|
||||
<p>After migrating to the new servers, I encountered a few of these messages in the log, so I had to search through and find all users affected by this. Since these large files not only consume unnecessary disk space but also affect performance and cause <code>dsync</code> issues, I had to do something about it.</p>
|
||||
<h2 id="is-it-safe-to-delete-these-files">Is It Safe to Delete These Files?</h2>
|
||||
<p>Short answer: <strong>Yes</strong> — it’s safe to delete all <code>dovecot.index*</code> files inside a user’s Maildir.</p>
|
||||
<p>Dovecot will automatically regenerate the indexes when needed. This will result in a small delay the first time a user accesses their mailbox after deleting these files, but performance will return to normal quickly.</p>
|
||||
<h2 id="how-to-find-and-clean-up-large-index-files">How to Find and Clean Up Large Index Files</h2>
|
||||
<p>First, you should check what “large” means for your setup. I checked for files that are larger than 100 MB in size using the following command:</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">find /var/vmail -type f -name <span class="s2">"dovecot.index.cache"</span> -size +100M -exec ls -lh <span class="o">{}</span> <span class="se">\;</span>
|
||||
</span></span></code></pre></div><p>After validating these files and users, I then moved into the user’s Maildir and removed the files:</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gdscript3" data-lang="gdscript3"><span class="line"><span class="cl"><span class="n">cd</span> <span class="o">/</span><span class="k">var</span><span class="o">/</span><span class="n">vmail</span><span class="o">/</span><span class="n">domain</span><span class="o">.</span><span class="n">tld</span><span class="o">/</span><span class="n">affecteduser</span><span class="o">/</span><span class="n">Maildir</span><span class="o">/</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="n">rm</span> <span class="n">dovecot</span><span class="o">.</span><span class="n">index</span><span class="o">*</span>
|
||||
</span></span></code></pre></div><h2 id="what-else-can-i-do">What Else Can I Do?</h2>
|
||||
<p>There’s another way to deal with large index files: you could increase the virtual memory limit that Dovecot is allowed to use, which is controlled by the <code>default_vsz_limit</code> in Dovecot’s configuration files.</p>
|
||||
<p>Another option to prevent future bloat of these files would be adjusting the <code>mail_cache_fields</code> and <code>mail_never_cache_fields</code> in the configuration.</p>
|
||||
<p>I decided to delete these files for affected users because these files had grown so large before migrating to the new setup. After regenerating, the files are much smaller, and time will tell if this becomes an issue again.</p>
|
||||
<h1 id="conclusion">Conclusion</h1>
|
||||
<p>If you encounter these warnings in your logs, it’s worth checking the <code>dovecot.index.cache</code> files and dealing with them. Cleaning them up is safe and easy — Dovecot will take care of rebuilding what it needs.</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<nav class="post-navigation" aria-label="Post navigation">
|
||||
|
||||
<a
|
||||
href="/posts/my-first-post/"
|
||||
class="nav-link nav-prev"
|
||||
aria-label="Previous post: Introduction">
|
||||
<span class="nav-label">Previous</span>
|
||||
<span class="nav-title">Introduction</span>
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<a
|
||||
href="/posts/blocking-invalid-rcpt-postfix/"
|
||||
class="nav-link nav-next"
|
||||
aria-label="Next post: Blocking Invalid Recipients Before They Reach Your Exchange Server">
|
||||
<span class="nav-label">Next</span>
|
||||
<span class="nav-title">Blocking Invalid Recipients Before They Reach Your Exchange Server</span>
|
||||
</a>
|
||||
|
||||
</nav>
|
||||
</article>
|
||||
|
||||
|
||||
<aside class="post-toc" id="post-toc" aria-label="Table of contents">
|
||||
<button
|
||||
class="toc-toggle"
|
||||
id="toc-toggle"
|
||||
aria-expanded="true"
|
||||
aria-controls="toc-content"
|
||||
aria-label="Toggle table of contents">
|
||||
<svg
|
||||
class="toc-burger-icon"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
aria-hidden="true">
|
||||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||
</svg>
|
||||
<span class="toc-toggle-text">Table of Contents</span>
|
||||
<svg
|
||||
class="toc-chevron-icon"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
aria-hidden="true">
|
||||
<polyline points="6 9 12 15 18 9"></polyline>
|
||||
</svg>
|
||||
</button>
|
||||
<div class="toc-content" id="toc-content">
|
||||
<nav class="toc-nav" aria-label="Table of contents">
|
||||
<nav id="TableOfContents">
|
||||
<ul>
|
||||
<li>
|
||||
<ul>
|
||||
<li><a href="#during-normal-operation">During Normal Operation</a></li>
|
||||
<li><a href="#after-a-migration">After a Migration</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul>
|
||||
<li><a href="#is-it-safe-to-delete-these-files">Is It Safe to Delete These Files?</a></li>
|
||||
<li><a href="#how-to-find-and-clean-up-large-index-files">How to Find and Clean Up Large Index Files</a></li>
|
||||
<li><a href="#what-else-can-i-do">What Else Can I Do?</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</nav>
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<footer class="site-footer">
|
||||
<div class="footer-content">
|
||||
<p class="footer-text">
|
||||
©
|
||||
|
||||
2026
|
||||
|
||||
Demians Blog.
|
||||
|
||||
Built with Hugo and Mana ❤️
|
||||
|
||||
</p>
|
||||
|
||||
<div class="footer-social">
|
||||
<div class="social-links">
|
||||
|
||||
<a
|
||||
href="https://github.com/pyte1"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="social-link"
|
||||
aria-label="GitHub">
|
||||
<svg fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"
|
||||
clip-rule="evenodd"></path>
|
||||
</svg>
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="mailto:demian%20%28at%29%20pyte%20%28dot%29%20dev" class="social-link" aria-label="Email">
|
||||
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"></path>
|
||||
</svg>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</footer>
|
||||
|
||||
<div id="search-modal" class="search-modal" aria-hidden="true" role="dialog" aria-label="Search">
|
||||
<div class="search-modal-backdrop" id="search-modal-backdrop"></div>
|
||||
<div class="search-modal-container">
|
||||
<div class="search-input-wrapper">
|
||||
<svg class="search-input-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path>
|
||||
</svg>
|
||||
<input
|
||||
type="search"
|
||||
id="search-input"
|
||||
class="search-input"
|
||||
placeholder="Search..."
|
||||
autocomplete="off"
|
||||
aria-label="Search input">
|
||||
<button class="search-input-clear" id="search-input-clear" aria-label="Clear search">
|
||||
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"></path>
|
||||
</svg>
|
||||
</button>
|
||||
<button class="search-modal-close" id="search-modal-close" aria-label="Close search">
|
||||
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M6 18L18 6M6 6l12 12"></path>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<div id="search-results" class="search-results"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<button id="scroll-to-top" class="scroll-to-top" aria-label="Scroll to top" type="button">
|
||||
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M5 10l7-7m0 0l7 7m-7-7v18"></path>
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script src="/js/main.min.e60ab79dca7b920b4dc5cf3163ad5ce8794839b60f27778db65782f087be3e27.js" defer></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user