2026년 6월 25일 목요일

macOS Cloud Backup with KopiaUI: OneDrive, Google Drive & NAS (Step-by-Step)

How to Set Up Cloud Backup on macOS with KopiaUI
OneDrive · Google Drive · NAS Integration Guide

A step-by-step guide to building a cloud backup on macOS with KopiaUI, using OneDrive, Google Drive, or a NAS as the repository. It covers everything from installing KopiaUI to creating a repository, excluding files, scheduling automatic backups with a snapshot retention policy, and finally running a restore test — giving you a safe macOS backup with point-in-time snapshots, encryption, and deduplication.

OSmacOS 12 or later
Backup toolKopiaUI v0.23.1
RepositoryOneDrive · Google Drive · NAS
Install methodHomebrew

The backup you copy to an external drive "every now and then" falls apart the moment you lose a file and find yourself asking, "When did I last copy this?" Accidentally overwritten files, ransomware, and disk failures arrive without warning — and a plain copy or sync only protects the single current state.

Kopia solves this with point-in-time snapshots. You can roll back to an hour ago, yesterday, or any point last week, and because everything is encrypted locally with AES-256-GCM before upload, not even the cloud provider can read it. Thanks to block-level deduplication, backing up every hour barely increases your storage usage. On top of that, it reuses the OneDrive, Google Drive, or NAS you already have as the repository — so there's no extra cost.

This guide walks through how to use KopiaUI as a backup tool on macOS, from connecting OneDrive, Google Drive, or NAS cloud storage to scheduling automatic backups, setting a retention policy, and running a restore test — all configured the way you'd actually run it.

Choosing a backup tool — why KopiaUI? (vs. Kopia CLI & Restic)

Several tools can do the same job.

ToolCharacteristics
Kopia CLI Same engine as KopiaUI. Great for scripted automation in the terminal. Preferred in server environments.
Restic + Rclone Restic for snapshot backups, Rclone for cloud connectivity. A powerful combination, but the CLI setup is complex.
KopiaUI GUI based. Easy even for non-developers and general users who'd rather avoid the CLI. Open source and free.
💡
KopiaUI and the Kopia CLI share the same repository. You can set things up in the GUI and still automate with the CLI — mixing both works fine.

Why use Kopia instead of plain mirroring?

If you just use OneDrive or Google Drive, your files do sync to the cloud — that's true. But there are problems, listed below.

IssuePlain mirroringKopia backup
Versioning Keeps only the current state. Delete a file by mistake and it's gone from the cloud too. Keeps point-in-time snapshots. Restore to any past point.
Special characters in filenames Names like .hidden, file:name, a/b that OneDrive/Google Drive reject can't sync. Stores file contents as encrypted chunks, so there are no filename restrictions.
Dotfiles & config files Hidden files like .env, .ssh, .claude are limited or missed in sync. Can back up every file.
Symbolic links Links break or get ignored. Preserves link metadata (and can follow the target too, as an option).
Encryption The cloud provider can read your content. Encrypted locally with AES-256-GCM before upload. Even the provider can't read it.

1

Install KopiaUI (Homebrew · macOS)

brew install --cask kopiaui

If you don't have Homebrew, install it first from brew.sh. KopiaUI requires macOS 12 (Monterey) or later, and the install package bundles both the kopia CLI binary and the GUI. To download it directly, see the official installation docs.

Launch it from Launchpad or Spotlight (⌘ + SpaceKopiaUI).

💡
A macOS security warning may appear on first launch → System Settings → Privacy & Security → Allow.

Once it starts, the Select Storage Type screen appears.

KopiaUI first launch — Select Storage Type screen
KopiaUI first launch — the Select Storage Type screen

2

Connect cloud storage — OneDrive · Google Drive · NAS

KopiaUI has no dedicated cloud-integration menu. Instead, you install each cloud service's native macOS app, let it mount as a local folder, and then point KopiaUI to that local path.

Why this approach works well No need to install rclone, no OAuth admin approval required.
The cloud app handles syncing, so Kopia just behaves as if it's writing to a local disk.

2-1. OneDrive (Microsoft 365)

brew install --cask onedrive

Launch the app → sign in with your Microsoft 365 account → after the sync completes, check the mount path:

ls ~/Library/CloudStorage/
# OneDrive-YourCompany

mkdir ~/Library/CloudStorage/OneDrive-YourCompany/KopiaBackup

2-2. Google Drive

brew install --cask google-drive

Launch the app → sign in with your Google account, then set the sync option to "Stream files".

Google Drive Stream files sync setting
Google Drive preferences — choosing Stream files (saves local disk space)
💡
Stream files vs. Mirror files
Stream files keeps files in the cloud only and downloads them on access, so it uses almost no local disk space.
When Kopia takes a snapshot it automatically pulls the files it needs, so backup works even without mirroring.

After the sync completes, check the mount path:

ls ~/Library/CloudStorage/
# GoogleDrive-your@gmail.com

mkdir ~/Library/CloudStorage/GoogleDrive-your@gmail.com/My\ Drive/KopiaBackup
💡
For Google Drive you must create the folder under My Drive. You can't write directly under GoogleDrive-*/.

2-3. NAS (Synology, etc.)

If you have a personal NAS, you can connect it two ways.

Option A — Network mount (SMB)
Finder → ⌘K → enter smb://nas-ip/share → after mounting, point KopiaUI's Local Directory to /Volumes/ShareName/.

# Verify the mount
ls /Volumes/
# ShareName  ...

mkdir /Volumes/ShareName/KopiaBackup

Option B — SFTP (built into KopiaUI, recommended for Synology)
SFTP mounting on macOS is cumbersome because it needs extra tools (macFUSE, etc.). KopiaUI has a built-in SFTP backend, so it can connect directly without mounting.

On the Select Storage Type screen, choose "SFTP Server", then:

FieldExample
Hostname192.168.1.100 or the NAS domain
Port22
UsernameNAS account
Path/volume1/backup/KopiaBackup
Key authRegister an SSH key and no password is needed
💡
On Synology, enable SSH in DSM Control Panel → Terminal & SNMP first.
If you already use the Synology Drive app, it mounts at ~/Library/CloudStorage/SynologyDrive-xxx/, so the Local Directory approach works too.

Repository path summary

ServiceMethodPath / setting
OneDrive Local Directory ~/Library/CloudStorage/OneDrive-xxx/KopiaBackup
Google Drive Local Directory ~/Library/CloudStorage/GoogleDrive-xxx/My Drive/KopiaBackup
NAS (SMB) Local Directory /Volumes/ShareName/KopiaBackup
NAS / Synology SFTP Server Hostname + Port 22 + remote path

3

Create a KopiaUI repository

3-1. Choose "Local Directory or NAS"

On the Select Storage Type screen, click "Local Directory or NAS".

3-2. Enter the Directory Path

Enter the path of the backup folder you created earlier.

# OneDrive
/Users/your-username/Library/CloudStorage/OneDrive-YourCompany/KopiaBackup

# Google Drive
/Users/your-username/Library/CloudStorage/GoogleDrive-you@gmail.com/My Drive/KopiaBackup
KopiaUI backup repository path configuration screen
Enter the repository path, then click Next

3-3. Set the repository password

Kopia encrypts the repository with AES-256-GCM.

⚠️
Lose the password and the data is unrecoverable Be sure to store it separately somewhere safe, like 1Password or Bitwarden.
KopiaUI repository encryption password setup
Setting the repository encryption password

Click "Create Repository" → the repository is created.

KopiaUI repository created — My Repository screen
Repository created — the My Repository screen

4

Set up file exclusions (Ignore)

Exclude files/directories you don't need to back up, to save time and space.

Method 1: Policy UI (KopiaUI)

Snapshots → select a snapshot → Edit"Files" tab → enter patterns under Ignore Files.

.DS_Store
.Spotlight-V100
.Trashes
.fseventsd
Library/Caches
Library/CloudStorage
💡
The ~/ tilde doesn't work. Enter paths relative to the backup root.
The Effective column shows, in real time, the patterns that will actually apply.
KopiaUI backup ignore files policy screen
Ignore Files setup — checking Defined / Effective patterns
💡
Excluding Library/CloudStorage is especially important
It prevents duplicate backups of data already in the cloud, such as OneDrive or Synology Drive.

Method 2: .kopiaignore file

Create a .kopiaignore file in the directory being backed up and Kopia reads it automatically. It uses the same syntax as gitignore.

cat > ~/.kopiaignore << 'EOF'
.DS_Store
.Spotlight-V100
.Trashes
.fseventsd
Library/Caches/
Library/CloudStorage/
EOF

If you register .kopiaignore under Ignore Rule Files in the Policy UI, the .kopiaignore files in subdirectories are applied automatically too.

Symbolic links

By default Kopia backs up only the symbolic link itself (its metadata) and doesn't follow the target. Turning on the "Follow symlinks" option in the Policy → Files tab follows the target and backs up the actual contents.

💡
Be careful on macOS if ~/Desktop or ~/Documents are symlinked into iCloud Drive.

5

Run your first snapshot (backup)

Snapshots tab → "New Snapshot" → enter the local path to back up → click "Snapshot Now".

Once the backup starts, you can watch progress in real time on the Tasks tab.

KopiaUI snapshot backup in progress screen
Backup in progress — live view on the Tasks tab

When it finishes, check the result in the snapshot list.

KopiaUI backup complete snapshot result screen
Backup complete — 1.3 TB, 277,268 files

6

Set up scheduling & retention policy

Under Policies"Edit Policy", configure Scheduling and Retention together.

⏱️ Scheduling — snapshot frequency

Setting the Snapshot Interval to 1 hour or 2 hours is recommended.

💡
If you lose a file by mistake while coding, you can instantly restore to its state from at most 1–2 hours ago.
Because it's an incremental backup that stores only changed files, running it every hour barely uses any space.
If hourly feels like too much, 4 hours or Daily are good alternatives.
KopiaUI automatic backup scheduling screen
Scheduling tab — the Snapshot Frequency dropdown

🗄️ Retention — snapshot retention policy

The more often you back up, the more the cleanup rule for old snapshots matters. Configure it in Policies → Edit Policy → Retention.

Setting Recommended Description
Keep Latest 10 Always keep the 10 most recent snapshots — instantly undo a mistake you just made.
Keep Hourly 24 Keep hourly history for the past 24 hours.
Keep Daily 7 Keep daily history for the past week.
Keep Weekly 4 Keep weekly history up to a month back.
Keep Monthly 12 Keep monthly history up to a year back.
💡
In short
"Back up automatically every 2 hours, and let Kopia clean up old snapshots on its own, keeping a full year of history at a fine granularity."
KopiaUI snapshot retention policy screen
Retention tab — retention policy configured

7

Test a restore

🔑
A backup is only real once it restores. Always finish with a restore test.

7-1. Select a snapshot

Snapshots → click the snapshot point you want to restore.

7-2. Browse with the file browser

Click "Browse" → review the directory/file list.

KopiaUI snapshot restore file browser screen
Snapshot file browser — explore files at a given point in time

7-3. Run the restore

Click "Restore Files & Directories" → enter the Destination path → "Restore".

KopiaUI backup restore destination configuration screen
Restore destination and options

8

Practical operation tips

Automate with the CLI

KopiaUI and the kopia CLI share the same repository. Create the repository in the GUI, then script repetitive tasks with the CLI.

# Check repository connection status
kopia repository status

# Back up a specific path immediately
kopia snapshot create ~/Developer

# List snapshots / restore a specific one
kopia snapshot list
kopia restore k1a2b3c4... ~/restore-test

# Clean up old snapshots per the retention policy + reclaim unused blocks
kopia snapshot expire --all --delete
kopia maintenance run --full
💡
Schedule kopia snapshot create with cron or launchd and backups run in the background without KopiaUI open. Just use only one scheduler so it doesn't overlap with the GUI's.

Storage & performance

  • Deduplication + compression: On top of block-level deduplication, zstd compression is applied by default, so the actual upload size is often smaller than the original.
  • Only the first backup is heavy: The initial snapshot uploads everything, but after that it's incremental — only changed blocks are sent — so hourly runs are light.
  • Confirm the cloud sync finished: After Kopia writes to the local mount folder, the OneDrive/Google Drive app must finish the actual upload for the backup to exist "remotely." Right after a large backup, check the cloud app's sync status too.

Operate safely

  • The password is the data: Lose the repository password and the entire backup is permanently unrecoverable. Always keep it separately in 1Password, Bitwarden, etc.
  • The 3-2-1 rule: 3 copies, on 2 different media types, with 1 off-site. Don't rely on a single cloud — add one more repository on a NAS or external disk.
  • Test restores regularly: Run a real restore at least once a quarter to guarantee it's a "backup that restores."

Wrap-up

If you've followed along, you now have an encrypted snapshot backup that runs automatically every 2 hours. To recap:

  • Install KopiaUI → mount cloud/NAS as a local path → create an encrypted repository
  • Exclude unnecessary files with Ignore to save time and space
  • Use scheduling + retention to automatically manage a full year of point-in-time history
  • Confirm it's a "backup that actually works" with a restore test

It comes down to one line: a backup is finished not when you set it up, but when a restore succeeds. Once you're set up, run a restore test today.

🔗
Reference links
· Kopia official docs: kopia.io/docs
· Getting started: kopia.io/docs/getting-started
· GitHub releases: github.com/kopia/kopia/releases

At a glance

  • Deduplication + compression: Block-level dedup and zstd compression use cloud storage efficiently.
  • Retention policy: Set how many latest/hourly/daily/weekly/monthly snapshots to keep in Policies → Edit Policy → Retention.
  • Mix GUI & CLI: Use kopia snapshot list, kopia restore, and more against the same repository.
  • Back up the password: Without the password, the data simply can't be recovered.
  • Restore is the real backup: Run restore tests regularly to ensure reliability.

2026년 6월 23일 화요일

How to Install Jellyfin on Samsung Tizen TV | App Store and Sideload Guide


Want to install Jellyfin on a Samsung Tizen TV?
Start with the Samsung Apps store. Jellyfin now has an official Tizen client, but store availability can still differ by country, TV model, and firmware. If the app does not appear on your TV, this guide also covers two sideloading methods: a quick Docker installer and the official Tizen Studio build process.

Quick answer
  1. Open Apps on the Samsung TV and search for Jellyfin.
  2. If it is available, install it directly from the store. This is the easiest method.
  3. If it is not listed, enable Developer Mode and use either the community Docker installer or the official Jellyfin Tizen build instructions below.

Which installation method should you use?

MethodBest forDifficulty
Samsung Apps storeEveryone, when the app is available in the TV's regionEasy
Docker quick installerUsers who already have Docker and want a fast sideloadMedium
Tizen Studio buildUsers who want the official source-based workflow or need their own certificateAdvanced
Current status: Jellyfin is listed in Samsung's US Smart TV app catalog, and Jellyfin's official download page links to the Tizen app. Check your TV first because availability is not identical in every region.

Before you begin

  • A Samsung TV running Tizen with current firmware
  • A Jellyfin server already running on a PC, NAS, or home server
  • The TV and computer connected to the same local network
  • The TV's IP address and the computer's local IP address

After installation, the TV app connects to your server with an address such as http://192.168.0.100:8096. A DHCP reservation for the server is useful so that this address does not change.

Method 1: Install Jellyfin from Samsung Apps

  1. Press the Home button on the Samsung remote.
  2. Open Apps and select Search.
  3. Search for Jellyfin.
  4. Select Install, open the app, and enter your Jellyfin server address.

If no result appears, it may be unavailable for your region or model. You can use one of the sideloading methods below instead.

Enable Developer Mode on the Samsung TV

Both sideloading methods require Developer Mode. Samsung's menu wording can vary slightly by firmware.

  1. On the TV, open Smart Hub > Apps.
  2. While the Apps screen is open, enter 12345 with the remote.
Enter 12345 while the Apps screen is open.
  1. Set Developer mode to On.
  2. Enter the local IP address of the computer that will install the app.
Turn Developer Mode on and enter the computer's local IP address.
  1. Confirm the setting, then fully restart the TV.
  2. Return to Apps and confirm that Develop Mode is displayed.
Developer Mode is active after the TV restarts.
Do not use an old USB installation guide. Samsung's current developer documentation states that installing TV widgets from a USB drive is no longer supported.

Method 2: Quick sideload with Docker

The install-jellyfin-tizen container is a community tool, not an official Jellyfin or Samsung installer. It automates the build, certificate, and deployment steps.

After enabling Developer Mode, replace TV_IP with the TV's local IP address:

docker run --rm ghcr.io/georift/install-jellyfin-tizen TV_IP

For example:

docker run --rm ghcr.io/georift/install-jellyfin-tizen 192.168.0.50

On an Apple Silicon Mac, the image may need x86 emulation:

docker run --rm --platform linux/amd64 \
  ghcr.io/georift/install-jellyfin-tizen 192.168.0.50

If Docker reports a file-descriptor or library initialization error, the project documents this workaround:

docker run --rm --ulimit nofile=1024:65536 \
  ghcr.io/georift/install-jellyfin-tizen 192.168.0.50

Recent TVs can reject automatically generated certificates. If that happens, use the Tizen Studio method and create a Samsung certificate profile.

Method 3: Build and install with Tizen Studio

This is the source-based workflow documented by the official Jellyfin Tizen repository. You need Tizen Studio 4.6 or later, Git, Node.js 20 or later, and a valid Samsung certificate profile.

1. Connect to the TV

sdb connect TV_IP
sdb devices

Note the target name shown by sdb devices. It is used in the install commands.

2. Build Jellyfin Web and the Tizen package

git clone -b release-10.10.z https://github.com/jellyfin/jellyfin-web.git
git clone https://github.com/jellyfin/jellyfin-tizen.git

cd jellyfin-web
npm ci --no-audit
USE_SYSTEM_FONTS=1 npm run build:production

cd ../jellyfin-tizen
JELLYFIN_WEB_DIR=../jellyfin-web/dist npm ci --no-audit
tizen build-web -e ".*" -e gulpfile.babel.js -e README.md \
  -e "node_modules/*" -e "package*.json" -e "yarn.lock"
tizen package -t wgt -o . -- .buildResult

3. Permit and install the package

Replace TARGET with the device name shown by sdb devices:

tizen install-permit -t TARGET
tizen install -n Jellyfin.wgt -t TARGET
Jellyfin appears in the downloaded apps list after a successful installation.

Connect the TV app to your Jellyfin server

  1. Open Jellyfin on the TV.
  2. Enter the server URL, for example http://192.168.0.100:8096.
  3. Sign in with your Jellyfin account.
  4. Test direct playback, subtitles, and audio output with a few files.

If the server is not found, confirm that the TV and server are on the same network, the server firewall allows port 8096, and the Jellyfin server is listening on the LAN interface.

Troubleshooting

The 12345 Developer Mode window does not open

Make sure the Apps screen is active before entering the digits. Try the number keys on the on-screen remote, update the TV firmware, and restart Smart Hub if necessary.

sdb connect cannot reach the TV

  • Confirm the TV and computer are on the same subnet.
  • Recheck both IP addresses in Developer Mode.
  • Restart the TV after changing the Host PC IP.
  • Temporarily check whether a computer firewall is blocking the connection.

Samsung notes that port 26101 is used internally by the TV and cannot be opened separately from the TV menu.

Installation fails with certificate errors such as -11 or -12

Recreate the Samsung certificate profile in Tizen Studio and package the widget again. If another Jellyfin package was signed by a different author certificate, uninstall it from the TV before retrying.

The app disappears or stops working after a TV update

Sideloaded apps can require reinstallation after firmware, certificate, or developer-mode changes. Use the store version when it is available because updates are simpler.

Final notes

The Samsung Apps version is now the best first choice. Sideloading remains useful when Jellyfin is missing from a regional store, but model support, firmware behavior, and certificate requirements can change. For the latest commands, compare this guide with the official links below before installing.

A Korean version with the original setup notes is available here: 삼성 Tizen TV에 Jellyfin 설치하기.

Official references

 

2023년 3월 8일 수요일

IP 가 여러개인 Linux 에서 디폴트로 사용중인 IP 주소 찾기

 ip route get 8.8.8.8

이러면 8.8.8.8 로 가기 위한 기본 경로를 알려준다

ip route get 8.8.8.8

8.8.8.8 via 1.227.225.1 dev eth0  src 1.227.225.48

    cache  mtu 1500 advmss 1460 hoplimit 64


src 다음에 나오는 IP가 디폴트로 쓰이는 IP가 된다. 


이것만 추출하려면

 ip route get 8.8.8.8 | head -1 | cut -d' ' -f8

또는

ip route get 8.8.8.8 | sed -n 's/^.*src \([0-9.]*\) .*$/\1/p'


ip route get 8.8.8.8 | head -1 | awk '{print $7}'


2023년 2월 13일 월요일

Volumio VMWare esxi 설치

Volumio Image 를 rufus 등을 이용하여 USB Stick 으로 플래쉬하고,  VMWare USB Stick 으로 부팅하면 

아래와 같은 메시지후 진행되지 않는다

findfs: unable to resolve 'UUID=****************...'


이는 USB Stick 이 disk drive 처럼 인식되지 않기 때문이다.


SATA disk 형태로 16GB 정도 만든후

live Linux CD/DVD 등을 준비 하여 Linux Live CD/DVD 로 부팅한다.


터미널을 열어 root 쉘을 얻는다

nc 를 통해 124번 포트를 open 한후 들어오는 데이터를 /dev/sda 로 받는다

nc -l -p 1234 > /dev/sda



다른 서버나 리눅스등을 이용해서 위에 nc 를 open 한 Linux CD/DVD 서버 IP를 확인후 
 Volumio 이미지를 nc를 이용하여 네트워크 전송을 한다

 nc -w 3 192.168.0.77 1234 < Volumio-3.423-2023-01-24-x86_amd64.img

이제 live Linux CD/DVD 등을 제거한후 /dev/sda 로 부팅하면 Volumio 셋업 화면을 볼수 있다.


2022년 5월 23일 월요일

ASUS OpenVPN 에서 client config 내부 라우팅 안될때

OpenVPN Route for MacOS

내부 IP 대역이 192.168.1.0/24 이라고 가정하고

OpenVPN Client IP를 10.8.0.6 으로 할당 받았다고 가정

sudo route add -net 192.168.1.0 -netmask 255.255.255.0 10.8.0.6


그러나 매번 VPN 접속마다 Route 가 틀어져서 번거로운 일임 따라서 아래의 client vpn config에 마지막줄에 Route 명령어를 넣어준다

route 192.168.1.0 255.255.255.0 


Stream Your PC Games to a Samsung TV — Sunshine + Moonlight Setup Guide (Free GeForce Now Alternative)

Stream Your PC Games to a Samsung TV — Sunshine + Moonlight Cloud gaming like GeForce Now costs a monthly subscription. But what if you u...