এটি নিজস্ব হোস্টে Hermes Agent চালানো সেই অপারেটরের জন্য, যিনি Linux অ্যাকাউন্ট ও ব্যক্তিগত GitHub সংগ্রহশালা পরিচালনা করতে পারেন। লক্ষ্য নির্দিষ্ট: সম্পূর্ণ Hermes ব্যবহারকারী ডেটা আর্কাইভ, হোস্ট ছাড়ার আগে এনক্রিপ্ট করা, নির্দিষ্ট ব্যক্তিগত রিমোটে নিশ্চিত করা এবং অন্য অস্থায়ী পরীক্ষামূলক মেশিনে সংগ্রহ ও আমদানি করা। নথিভুক্ত প্রক্রিয়াটি Hermes CLI-এর নির্দিষ্ট commit 86fa9e6 অনুযায়ী, যাচাইয়ের তারিখ 19 অক্টোবর 2026। BIG CHANGE নিষ্ক্রিয় স্থানীয় পরীক্ষার উপকরণে shell গঠন ও নিয়ন্ত্রণপ্রবাহ দেখেছে; প্রকৃত Hermes ব্যাকআপ, age এনক্রিপশন, GitHub push, নির্ধারিত চালনা বা পুনরুদ্ধার করেনি। নিচের সব পরীক্ষা নিজে করার পরই নিজের ইনস্টলেশনের ব্যাকআপকে প্রমাণিত ধরুন।

বড় পরিবর্তন

  • কী বদলেছে: Hermes-এর সম্পূর্ণ ব্যাকআপ কমান্ড কাজের ডেটা ZIP-এ জমা করে, আর এজেন্টবিহীন cron মোড পর্যালোচিত স্ক্রিপ্ট চালাতে পারে। একসঙ্গে ব্যবহার করে AI মডেলকে ব্যাকআপের কাজ না দিয়েই নির্ধারিত এনক্রিপ্ট করা কপি তৈরি করা যায়।
  • কেন গুরুত্বপূর্ণ: অপারেটর তিনটি আলাদা তথ্য যাচাই করেন: Hermes আর্কাইভ শেষ করেছে, এনক্রিপ্ট করা ডেটা নির্দিষ্ট ব্যক্তিগত সংগ্রহশালায় পৌঁছেছে এবং নতুন ইনস্টলেশন তা আমদানি করতে পারে। প্রতিটি পরীক্ষা ভিন্ন ব্যর্থতা ধরে। অ্যাপ্লিকেশন ও কিছু মেশিন-স্থানীয় ডেটা তবু বাদ থাকে।
  • যা খেয়াল রাখবেন: ব্যবহারিক সিদ্ধান্ত হলো আর্কাইভ ও বাড়তে থাকা Git ইতিহাস এই সীমিত পথের জন্য যথেষ্ট ছোট আছে কি না। পুনরুদ্ধার মহড়া ব্যর্থ হলে বা যেকোনো আকারসীমায় থামলে নির্ধারিত কাজের ওপর নির্ভর করার আগে অন্য সংরক্ষণ পরিকল্পনা দরকার।

1. হোস্ট, চাবি ও সংগ্রহশালা প্রস্তুত করুন

Linux-এর সঙ্গে Bash, GNU stat -c ও du -sb, ইনস্টল করা Hermes CLI, Git, GitHub CLI (gh), age, unzip, sha256sum, SSH এবং cron-এর জন্য সক্রিয় Hermes গেটওয়ে ব্যবহার করুন। ইনস্টল করা hermes backup, hermes import ও hermes cron create --help যেন নির্দিষ্ট commit-এর CLI তথ্যসূত্র, সাধারণ প্রশ্নোত্তর ও cron ম্যানুয়াল-এর সঙ্গে মেলে, দেখুন। গেটওয়ের OS ব্যবহারকারী ও HERMES_HOME চিহ্নিত করুন। সব হোস্ট সেটআপ ও প্রথম হাতে চালানো ব্যাকআপ সেই ব্যবহারকারী হিসেবে করুন। উদাহরণে আলাদা পরিষ্কার Git ক্লোন ও main শাখা ধরা হয়েছে।

Hermes-এর সম্পূর্ণ ব্যাকআপে ডেটা রুটের কনফিগারেশন, পরিচয়তথ্য, স্মৃতি, স্কিল, সেশন ও প্রোফাইল থাকে। Hermes কোড, ডাউনলোড করা নির্ভরতা ও রানটাইম, পুরোনো ব্যাকআপ, চেকপয়েন্ট, ব্রাউজার পরিচয়তথ্য প্রোফাইল, SQLite সহায়ক ফাইল ও কিছু স্থানীয় ফাইল বাদ থাকে। হোস্টের অন্য স্থানের অসংশ্লিষ্ট ফাইলও সংগ্রহ করে না। এই সম্পূর্ণ ডেটা ব্যাকআপের জন্য --quick ব্যবহার করবেন না। সীমার বাইরের গুরুত্বপূর্ণ উপকরণ দেখে আলাদা সুরক্ষা দিন। গন্তব্য ব্যক্তিগত হলেও ZIP-এ গোপন তথ্য থাকে।

আর্কাইভ ডিক্রিপ্ট করার ব্যক্তিগত চাবি age identity সুরক্ষিত স্থানে তৈরি করুন, যা HERMES_HOME, অস্থায়ী প্রস্তুতি ডিরেক্টরি ও Git ক্লোনের বাইরে। পরিচয়ের পুনরুদ্ধার কপি স্বাধীন সংরক্ষণে রাখুন। মুদ্রিত প্রাপক age1… প্রকাশ্য, তাই কনফিগারেশনে যাবে; ব্যক্তিগত identity যাবে না। অনুসরণ করুন age ব্যবহারের তথ্যসূত্র।

Terminal
umask 077
install -d -m 700 /PRIVATE-KEY-STORE
age-keygen -o /PRIVATE-KEY-STORE/hermes-backup-identity.txt
age-keygen -y /PRIVATE-KEY-STORE/hermes-backup-identity.txt

শুধু এই ব্যাকআপের জন্য ব্যক্তিগত সংগ্রহশালা তৈরি করুন, কার প্রবেশাধিকার আছে দেখুন এবং Hermes cron চালানো একই OS ব্যবহারকারীর জন্য অ-ইন্টারঅ্যাকটিভ gh পঠন ও Git SSH লেখার ব্যবস্থা করুন। টোকেন ও ব্যক্তিগত SSH চাবি Hermes ডেটা, প্রস্তুতির স্থান ও Git-এর বাইরে রাখুন। অন্য অ্যাকাউন্টের ইন্টারঅ্যাকটিভ লগইন নির্ধারিত প্রবেশাধিকার প্রমাণ করে না। উদাহরণ চালানোর আগে বড় অক্ষরের স্থানধারক বদলান। সংগ্রহশালা তৈরির সময় README বা main শাখা তৈরি হয়ে থাকলে দেখুন এবং বিরোধী প্রাথমিক কমান্ড বাদ দিন।

Terminal
gh repo create ACCOUNT/PRIVATE-REPOSITORY --private --clone
gh repo view ACCOUNT/PRIVATE-REPOSITORY --json isPrivate --jq .isPrivate
cd PRIVATE-REPOSITORY
git remote set-url origin git@github.com:ACCOUNT/PRIVATE-REPOSITORY.git
git remote get-url --all origin
git remote get-url --push --all origin
git branch -M main
printf '%s\n' 'Encrypted Hermes backup storage; ciphertext and checksum only.' > README.md
git add README.md
git commit -m 'Initialize private backup repository'
git push -u origin HEAD:main
git ls-remote --heads origin main

gh repo create --clone স্থানীয় পছন্দ থেকে HTTPS নিতে পারে; উপরের স্পষ্ট SSH রিমোটই এই প্রক্রিয়ার গন্তব্য। এগোন কেবল যখন isPrivate ফেরত দেয় true, সহযোগীরা প্রত্যাশিত, কার্যকর fetch ও push URL প্রত্যেকটি একই পরীক্ষিত SSH URL-এর সমান এবং নির্ধারিত ব্যবহারকারীর রিমোট প্রবেশ সফল। Git রিমোটের নিয়ম URL পুনর্লিখন, বাড়তি গন্তব্য ও আলাদা pushurl অনুমোদন করে; স্ক্রিপ্ট প্রতিবার মূল ও কার্যকর মান দেখে।

পরের দুটি কোড ব্লক রাখার আগে ক্লোন থেকে বের হন। Hermes ডেটা রুট, Git ক্লোন, অস্থায়ী প্রস্তুতি ও চাবি সংরক্ষণের বাইরে ব্যক্তিগত সেটআপ ডিরেক্টরি তৈরি করুন। hermes-github-backup.sh ও hermes-github-backup.conf সেখানে রাখুন; ইনস্টল কমান্ড মালিকের প্রোফাইলে কপি করবে। নির্দিষ্ট Git ক্লোন পরিষ্কার থাকতে হবে।

Terminal
install -d -m 700 /ABSOLUTE/PRIVATE-SETUP
cd /ABSOLUTE/PRIVATE-SETUP

2. পর্যালোচিত ব্যাকআপ স্ক্রিপ্ট ইনস্টল করুন

নিচের পুরো Bash ব্লক hermes-github-backup.sh নামে সেই ব্যক্তিগত ডিরেক্টরিতে রাখুন। দ্বিতীয় ব্লক hermes-github-backup.conf নামে পাশে রেখে সব স্থানধারক পূর্ণ পাথ বা প্রকাশ্য প্রাপক দিয়ে বদলান। এটি স্থানীয়ভাবে পর্যালোচনার shell কনফিগারেশন; লোড করার আগে দেখুন এবং শুধু মালিককে অনুমতি দিন। পাসওয়ার্ড, টোকেন বা ব্যক্তিগত age identity রাখা চলবে না। এটি সম্পূর্ণ প্রস্তাবিত উদাহরণ; গঠন ও নিষ্ক্রিয় প্রবাহ পরীক্ষা হয়েছে, কিন্তু নিজস্ব ইনস্টলেশনে মানিয়ে পরীক্ষা করুন। তৈরি latest.zip.age ফাইলই এনক্রিপ্ট করা আর্কাইভ।

Terminal
#!/usr/bin/env bash
# Documentation-based Linux sample for an operator to review and adapt.
# Place with hermes-github-backup.conf under the owning HERMES_HOME/scripts/.
# Requires GNU stat -c and du -sb. Git Bash was used only for inert fixtures.
set -Eeuo pipefail
umask 077

script_dir=$(CDPATH= cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)
owning_home=$(CDPATH= cd -- "$script_dir/.." && pwd -P)
if [[ -n ${HERMES_HOME:-} && $(CDPATH= cd -- "$HERMES_HOME" && pwd -P) != "$owning_home" ]]; then
  printf 'Backup stopped: cron profile and script directory differ.\n' >&2
  exit 1
fi
export HERMES_HOME="$owning_home"

config="$script_dir/hermes-github-backup.conf"
[[ -f "$config" ]] || { printf 'Backup stopped: reviewed configuration missing.\n' >&2; exit 1; }
# This file is local, owner-reviewed shell configuration. It must contain no secret.
# shellcheck source=/dev/null
source "$config"
: "${HERMES_BIN:?set an absolute Hermes executable path}"
: "${REPO_DIR:?set an absolute private clone path}"
: "${STAGING_PARENT:?set an absolute private staging path}"
: "${AGE_RECIPIENT:?set an age public recipient}"
: "${EXPECTED_REMOTE:?set the exact private GitHub SSH remote}"
: "${BRANCH:=main}"

fail() { printf 'Backup stopped: %s.\n' "$1" >&2; exit 1; }
for path in "$HERMES_BIN" "$REPO_DIR" "$STAGING_PARENT"; do
  [[ $path == /* ]] || fail 'a configured path is not absolute'
done
[[ -x "$HERMES_BIN" ]] || fail 'Hermes executable unavailable'
[[ $AGE_RECIPIENT == age1* ]] || fail 'age public recipient invalid'
[[ $EXPECTED_REMOTE == git@github.com:*/*.git ]] || fail 'remote is not the reviewed GitHub SSH URL'
[[ $BRANCH =~ ^[a-zA-Z0-9._/-]+$ ]] || fail 'branch name invalid'
[[ -d "$STAGING_PARENT" ]] || fail 'staging directory unavailable'
stage_parent=$(CDPATH= cd -- "$STAGING_PARENT" && pwd -P)
[[ $stage_parent != "$owning_home" && $stage_parent != "$owning_home"/* ]] || fail 'staging is inside Hermes data'

# Atomic, nonblocking whole-flow lock: keep it through push and remote readback.
# A stale directory after a crash requires operator inspection; never steal it.
lockdir="$stage_parent/.hermes-github-backup-flow.lock"
mkdir -- "$lockdir" 2>/dev/null || fail 'another backup flow holds the lock or a stale lock needs review'
work=''
cleanup() {
  if [[ -n $work ]]; then
    rm -f -- "$work/hermes.zip" "$work/latest.zip.age" "$work/latest.sha256" "$work/backup.log"
    rmdir -- "$work" 2>/dev/null || true
  fi
  rmdir -- "$lockdir" 2>/dev/null || true
}
trap cleanup EXIT

[[ -d "$REPO_DIR/.git" ]] || fail 'Git repository unavailable'
repo=$(CDPATH= cd -- "$REPO_DIR" && pwd -P)
[[ $repo != "$owning_home" && $repo != "$owning_home"/* ]] || fail 'repository is inside Hermes data'
[[ $stage_parent != "$repo" && $stage_parent != "$repo"/* ]] || fail 'staging is inside Git repository'
[[ $repo != "$stage_parent"/* ]] || fail 'Git repository is inside staging'

command -v age >/dev/null || fail 'age unavailable'
command -v gh >/dev/null || fail 'GitHub CLI unavailable for private visibility check'
command -v unzip >/dev/null || fail 'zip verifier unavailable'
command -v git >/dev/null || fail 'Git unavailable'
remote_repo=${EXPECTED_REMOTE#git@github.com:}
remote_repo=${remote_repo%.git}
visibility=$(gh repo view "$remote_repo" --json isPrivate --jq .isPrivate 2>/dev/null) || fail 'GitHub repository visibility unreadable'
[[ $visibility == true ]] || fail 'GitHub repository is not confirmed private'
raw_fetch_urls=$(git -C "$repo" config --get-all remote.origin.url) || fail 'Git fetch URL missing'
[[ $raw_fetch_urls == "$EXPECTED_REMOTE" ]] || fail 'Git has multiple or unexpected raw fetch URLs'
raw_push_urls=$(git -C "$repo" config --get-all remote.origin.pushurl || true)
[[ -z $raw_push_urls ]] || fail 'separate Git pushurl requires independent review'
effective_fetch_urls=$(git -C "$repo" remote get-url --all origin) || fail 'effective fetch URL unreadable'
effective_push_urls=$(git -C "$repo" remote get-url --push --all origin) || fail 'effective push URL unreadable'
[[ $effective_fetch_urls == "$EXPECTED_REMOTE" ]] || fail 'Git fetch URL rewrite or extra destination'
[[ $effective_push_urls == "$EXPECTED_REMOTE" ]] || fail 'Git push URL rewrite or extra destination'
[[ $(git -C "$repo" branch --show-current) == "$BRANCH" ]] || fail 'local branch changed'
[[ -z $(git -C "$repo" status --porcelain --untracked-files=all) ]] || fail 'repository has unrelated changes'

# No interactive prompt is possible in an unattended Hermes cron tick.
export GIT_TERMINAL_PROMPT=0
export GIT_SSH_COMMAND='ssh -o BatchMode=yes'
remote_head=$(git -C "$repo" ls-remote --heads origin "$BRANCH" | awk '{print $1}')
[[ -n $remote_head && $remote_head == "$(git -C "$repo" rev-parse HEAD)" ]] || fail 'remote unreadable or branch has changed'

work=$(mktemp -d "$stage_parent/hermes-backup.XXXXXXXX") || fail 'private staging creation failed'

if "$HERMES_BIN" backup -o "$work/hermes.zip" >"$work/backup.log" 2>&1; then
  :
else
  backup_rc=$?
  fail "Hermes full backup returned $backup_rc; temporary zip/log will be removed, so diagnose with a separate controlled manual run"
fi
[[ -s "$work/hermes.zip" ]] || fail 'Hermes archive absent or empty'
unzip -tq "$work/hermes.zip" >"$work/backup.log" 2>&1 || fail 'zip integrity check failed'
age -r "$AGE_RECIPIENT" -o "$work/latest.zip.age" "$work/hermes.zip" >"$work/backup.log" 2>&1 || fail 'archive encryption failed'
[[ -s "$work/latest.zip.age" ]] || fail 'encrypted archive absent or empty'

# Deliberately below GitHub's 50 MiB warning. Git history retains every version.
cipher_bytes=$(stat -c %s "$work/latest.zip.age")
(( cipher_bytes <= 40000000 )) || fail 'encrypted archive exceeds this small-repository recipe'
git_bytes=$(du -sb "$repo/.git" | awk '{print $1}')
(( git_bytes + cipher_bytes + 10000000 <= 500000000 )) || fail 'repository history approaches the review limit'
hash=$(sha256sum "$work/latest.zip.age" | awk '{print $1}')
printf '%s  latest.zip.age\n' "$hash" >"$work/latest.sha256"

cp -- "$work/latest.zip.age" "$repo/latest.zip.age"
cp -- "$work/latest.sha256" "$repo/latest.sha256"
git -C "$repo" add -- latest.zip.age latest.sha256
staged=$(git -C "$repo" diff --cached --name-only)
[[ $staged == $'latest.sha256\nlatest.zip.age' ]] || fail 'staged paths are not the two reviewed files'
git -C "$repo" diff --cached --check >/dev/null || fail 'staged content check failed'
git -C "$repo" commit -m "Encrypted Hermes backup $(date -u +%Y-%m-%dT%H:%M:%SZ)" >/dev/null || fail 'local backup commit failed'
run_head=$(git -C "$repo" rev-parse HEAD)
(( $(du -sb "$repo/.git" | awk '{print $1}') <= 500000000 )) || fail 'Git history exceeds review limit before push'
[[ $(git -C "$repo" rev-parse HEAD) == "$run_head" ]] || fail 'local HEAD changed before push'
git -C "$repo" push origin "$run_head:refs/heads/$BRANCH" >/dev/null || fail 'remote push failed; inspect exact remote before retrying'
remote_head=$(git -C "$repo" ls-remote --heads origin "$BRANCH" | awk '{print $1}')
[[ $remote_head == "$run_head" ]] || fail 'this run commit not confirmed at remote'
printf 'Encrypted backup verified at private remote commit %s.\n' "$run_head"
Terminal
# No passwords, tokens, age identities or private keys belong here.
HERMES_BIN=/absolute/path/to/hermes
REPO_DIR=/absolute/path/to/dedicated-private-github-clone
STAGING_PARENT=/absolute/path/to/private-staging-outside-hermes-and-git
AGE_RECIPIENT=age1replace_with_operator_public_recipient
EXPECTED_REMOTE=git@github.com:ACCOUNT/PRIVATE-REPOSITORY.git
BRANCH=main

Hermes ডেটা রুট ও Git ক্লোনের বাইরে প্রস্তুতি ডিরেক্টরি করুন। পর্যালোচিত ফাইল মালিকের প্রোফাইলের scripts/ ডিরেক্টরিতে রাখুন। প্রতিবার চালানোর আগে ক্লোন পরিষ্কার ও রিমোট main-এর সঙ্গে মিলতে হবে। স্ক্রিপ্ট push ও আবার পড়ে যাচাই পর্যন্ত পুরো প্রবাহ লক করে; ব্যবহৃত বা পুরোনো লক কেড়ে নেয় না। নতুন Git-প্রস্তুত ব্যাকআপ পাথ হিসেবে শুধু latest.zip.age ও latest.sha256 গ্রহণ করে। এনক্রিপ্ট করা ফাইল 40,000,000 বাইট ছাড়ালে বা স্থানীয় .git ও বাড়তি জায়গা মিলে 500,000,000 বাইট-এর কাছাকাছি এলে থামে। এগুলো নমুনার সতর্ক সীমা, GitHub সংরক্ষণের নিশ্চয়তা নয়।

Terminal
export HERMES_HOME=/absolute/path/to/owning-hermes-data-root
install -d -m 700 /ABSOLUTE/PRIVATE-STAGING
install -d -m 700 "$HERMES_HOME/scripts"
install -m 700 hermes-github-backup.sh "$HERMES_HOME/scripts/hermes-github-backup.sh"
install -m 600 hermes-github-backup.conf "$HERMES_HOME/scripts/hermes-github-backup.conf"
"$HERMES_HOME/scripts/hermes-github-backup.sh"

হাতে চালানো কাজ শূন্য প্রস্থান কোডে শেষ হয়ে নতুন রিমোট পঠনের পর সেই চালনায় তৈরি commit দেখাবে। নিশ্চিত করুন gh repo view এখনও ব্যক্তিগত বলছে; ক্লোনের অনুসৃত পাথ ও সঠিক রিমোটের নির্দিষ্ট commit দেখুন। স্থানীয় আর্কাইভ বা commit বহিরাগত সংরক্ষণের ফল নয়। থেমে যাওয়া কাজকে সফল লিখবেন না। Hermes অনুযায়ী সব নির্বাচিত ফাইল যুক্ত হলেই সম্পূর্ণ ব্যাকআপ ফেরায় 0; অসম্পূর্ণ আর্কাইভে 1, ZIP থাকলেও; অন্য ব্যাকআপ চললে 2 । বের হওয়ার সময় স্ক্রিপ্ট অস্থায়ী ZIP ও লগ মুছে দেয়; সাধারণ মোছা নিরাপদ নিশ্চিহ্নকরণ নয়। বাদ পড়া ফাইলের জন্য আলাদা নিয়ন্ত্রিত হাতে চালানো hermes backup -o /PRIVATE-DIAGNOSTIC/hermes.zip দিয়ে দেখুন, প্রস্থান অবস্থা ও প্রতিবেদন পড়ুন, বাদ যাওয়া উপকরণ রক্ষা করার সিদ্ধান্ত নিন।

3. সময় নির্ধারণ ও প্রথম চালনা দেখুন

হাতে চালানো ফল পাওয়ার পরেই একই প্রোফাইলে Hermes-এর নথিভুক্ত --no-agent --script মোড ব্যবহার করুন। এটি LLM ছাড়া ফাইল চালায়। ভেবেচিন্তে সময়ের ব্যবধান ও গোপন তথ্যহীন স্থানীয় অবস্থা-বার্তা বাছুন। গেটওয়ের OS পরিচয়, প্রোফাইল ও পরের সময় দেখুন। Hermes-এর স্ক্রিপ্ট সময়সীমা প্রথমে HERMES_CRON_SCRIPT_TIMEOUT, তারপর cron.script_timeout_seconds, তারপর পূর্বনির্ধারিত 3,600 সেকেন্ড থেকে আসে। পর্যবেক্ষিত চালনার উপযোগী মান সেট করে দেখুন; সময় শেষ হওয়া ব্যর্থতা। পরিশোধিত স্ক্রিপ্ট পরিবেশ Hermes-পরিচালিত সরবরাহকারীর পরিচয়তথ্য স্বয়ংক্রিয়ভাবে পায় না; নির্ভর করার আগে প্রকৃত নির্ধারিত ব্যবহারকারীর নজরদারিহীন gh ও SSH প্রবেশ যাচাই করুন।

Terminal
hermes cron create '0 3 * * *' --no-agent --script hermes-github-backup.sh --deliver local --name 'Encrypted Hermes backup'
hermes cron list
hermes cron status
hermes cron doctor

প্রথম নির্ধারিত সময়ের পরে সঠিক কাজের ID, চালনার রেকর্ড, স্থানীয় আউটপুট (পূর্বনির্ধারিত প্রোফাইলে ~/.hermes/cron/output/), ঘটনার রেকর্ড ও সঠিক রিমোটের শীর্ষ commit দেখুন। গেটওয়ে সচল ছিল এবং সেই চালনায় তৈরি রিমোট commit জানিয়েছে কি না দেখুন। হাতে চালানো cron চলার প্রমাণ নয়। আউটপুট না থাকলে সেই কাজ ও গেটওয়ে দেখুন, দ্বিতীয় সময়সূচি বানাবেন না। বার্তায় ZIP-এর বিষয়বস্তু, গোপন তথ্য বা পরিচয়তথ্য রাখবেন না।

4. নতুন মেশিনে সংগ্রহ ও আমদানি প্রমাণ করুন

ব্যবহার করুন পৃথক অস্থায়ী Linux মেশিন, যেখানে উৎপাদনের Hermes প্রোফাইল বা গেটওয়ে নেই। আগে সামঞ্জস্যপূর্ণ Hermes সংস্করণ ইনস্টল করুন: আর্কাইভ ব্যবহারকারীর ডেটা, অ্যাপ্লিকেশন বা রানটাইম ইমেজ নয়। পরীক্ষামূলক মেশিনকে সঠিক ব্যক্তিগত সংগ্রহশালা ও স্বাধীনভাবে রাখা age identity-র পৃথক অনুমোদিত পঠন দিন। ক্লোনের রিমোট ও নির্বাচিত commit নিশ্চিত করুন। উৎস হোস্ট বা পুরোনো প্রোফাইলে hermes import চালাবেন না। পুনরুদ্ধার করা সব সময়সূচি ও বাহ্যিক কাজ নিষ্ক্রিয় রাখুন যতক্ষণ মানুষ গন্তব্য দেখে চালু করার সিদ্ধান্ত না নেয়।

Terminal
umask 077
unset HERMES_HOME
git clone git@github.com:ACCOUNT/PRIVATE-REPOSITORY.git /PRIVATE-RECOVERY/hermes-backup-clone
cd /PRIVATE-RECOVERY/hermes-backup-clone
sha256sum -c latest.sha256
age --decrypt -i /PRIVATE-KEY-STORE/hermes-backup-identity.txt -o /PRIVATE-RECOVERY/hermes.zip latest.zip.age
unzip -tq /PRIVATE-RECOVERY/hermes.zip
hermes import /PRIVATE-RECOVERY/hermes.zip
hermes setup
hermes cron list

আমদানি হওয়া প্রোফাইল, স্কিল, স্মৃতি, সেশন ও cron সংজ্ঞা সুরক্ষার উদ্দেশ্যের সঙ্গে মিলিয়ে দেখুন। hermes setup সরবরাহকারীর কনফিগারেশন দেখে, কিন্তু বদলাতে হবে এমন পরিচয়তথ্য ও মেশিন-নির্দিষ্ট পাথও দেখুন। প্রকৃত ফল লিখুন। মিলছে এমন চেকসাম ও ডিক্রিপ্টযোগ্য ZIP একা ব্যবহারযোগ্য পুনরুদ্ধার প্রমাণ করে না। মহড়ার পরে স্থানীয় নীতি মেনে খোলা পাঠের পরীক্ষামূলক ZIP মুছুন; সাধারণ মোছা নিরাপদ মুছে ফেলার নিশ্চয়তা নয়।

যাচাই থামলে

অসম্পূর্ণ Hermes ব্যাকআপ, ZIP বা এনক্রিপশন ত্রুটি, অপ্রত্যাশিত কার্যকর Git URL, অ-ব্যক্তিগত বা অপাঠ্য সংগ্রহশালা, ব্যস্ত প্রবাহের লক, আকারসীমা, ব্যর্থ push, ভিন্ন রিমোট commit বা আমদানি ব্যর্থ হলে চালনাটি অনিশ্চিত থাকে। নির্দিষ্ট কারণ মিটিয়ে আবার চেষ্টার আগে বর্তমান অবস্থা দেখুন। push ফল অনিশ্চিত হলে আগে নির্দিষ্ট রিমোট শাখা ও commit দেখুন। ভেঙে পড়ার পর লক থাকলে জীবিত প্রক্রিয়া ও স্থানীয়/রিমোট অবস্থা দেখুন; সক্রিয় লক কখনও মুছবেন না। ব্যক্তিগত age identity হারালে ডিক্রিপ্ট করতে স্বাধীন সঠিক কপি চাই। খোলা পাঠের গোপন তথ্য Git-এ গেলে আগে ফাঁস হওয়া পরিচয়তথ্য বদলান; পরে ফাইল মোছায় পুরোনো ইতিহাস বা অন্য ক্লোন মুছে যায় না।

GitHub-এর বড় ফাইল নির্দেশিকা সতর্ক করে 50 MiB-এ এবং সাধারণ Git ফাইল আটকায় 100 MiB-এর ওপরে; Git ব্যাকআপের যন্ত্র হিসেবে তৈরি নয়। নমুনা ইচ্ছাকৃতভাবে তার আগে থামে। প্রতিটি বদলানো এনক্রিপ্ট করা উপকরণ Git ইতিহাসে থাকে, এমনকি latest.zip.age বদলালেও। 40 MB/500 MB সীমা চুপচাপ বাড়াবেন না, ইতিহাস পুনর্লিখবেন না বা ব্যক্তিগত সেটিংকে এনক্রিপশন ভাববেন না। আকার বা পুনরুদ্ধার পরীক্ষা ব্যর্থ হলে ব্যাকআপের নির্দিষ্ট সংরক্ষণ বা আলাদা যাচাই করা LFS পরিকল্পনা বিবেচনা করুন। অ্যাকাউন্ট, সংরক্ষণ, নেটওয়ার্ক ও হোস্ট খরচ থাকে; এজেন্টবিহীন স্ক্রিপ্ট নিজে LLM ডাক চায় না। সময়, সাফল্যের হার বা সাশ্রয় মাপা হয়নি।

আলাদা, ছোট পরিসরের Hermes সময় নির্ধারণের জন্য দেখুন স্কিল-ভিত্তিক পুনরাবৃত্ত Hermes কাজ বানানো ও প্রথম চালনা যাচাই করার পদ্ধতি। তার রিপোর্ট দেখা এনক্রিপ্ট করা আর্কাইভ ও পুনরুদ্ধার মহড়ার বিকল্প নয়।

উৎস ও অতিরিক্ত পাঠ