diff --git a/dist/log_data.py b/dist/log_data.py
index 0f3fb87ff2..bf779b36d0 100644
--- a/dist/log_data.py
+++ b/dist/log_data.py
@@ -80,6 +80,8 @@ optypes = [
     # Incremental backup IDs.
     LogOperationType('backup_id', 'incremental backup id', [
         ('uint32_t', 'index'), ('uint64_t', 'granularity'), ('string', 'id')]),
+    LogOperationType('live_restore', 'live restore restart', [
+        ('uint32_t', 'index'), ('uint32_id', 'fileid'), ('string', 'cookie')]),
 
 # diagnostic operations
 # Operations used only for diagnostic purposes should be have their type
diff --git a/src/log/log_sys.c b/src/log/log_sys.c
index 92e290f166..785eda231c 100644
--- a/src/log/log_sys.c
+++ b/src/log/log_sys.c
@@ -76,6 +76,72 @@ err:
     return (ret);
 }
 
+/*
+ * __wt_log_system_live_restore --
+ *     Write a system log record for the live restore information.
+ */
+int
+__wt_log_system_live_restore(WT_SESSION_IMPL *session)
+{
+    WT_CONNECTION_IMPL *conn;
+    WT_DECL_ITEM(logrec);
+    WT_DECL_RET;
+    WT_LIVE_RESTORE *live_restore;
+    WT_LOG *log;
+    size_t recsize;
+    uint32_t fileid, i, rectype;
+    const char nul;
+    const char *fmt;
+
+    conn = S2C(session);
+    nul = '\0';
+    /*
+     * If we're not logging or live restore isn't turned on or this version doesn't support
+     * the system log record, we're done.
+     */
+    if (!F_ISSET(&conn->log_mgr, WT_LOG_ENABLED) || !F_ISSET(conn, WT_CONN_LIVE_RESTORE))
+        return (0);
+    log = conn->log_mgr.log;
+    if (log->log_version < WT_LOG_VERSION_SYSTEM)
+        return (0);
+
+    /* Set up the system log record itself. */
+    rectype = WT_LOGREC_SYSTEM;
+    fmt = WT_UNCHECKED_STRING(I);
+    WT_ERR(__wt_struct_size(session, &recsize, fmt, rectype));
+    WT_ERR(__wt_logrec_alloc(session, recsize, &logrec));
+    WT_ERR(
+      __wt_struct_pack(session, (uint8_t *)logrec->data + logrec->size, recsize, fmt, rectype));
+    logrec->size += recsize;
+
+    /*
+     * Now set up the log operation component. The pack function will grow the log record buffer as
+     * necessary.
+     *
+     * XXX Fill in with correct connection data structure locations.
+     */
+    for (i = 0; i < conn->live_restore_extent_cnt; ++i) {
+        live_restore = &conn->live_restore_extents[i];
+        /*
+         * If live restore is in progress, write an operation. If this file is complete, skip it.
+	 * If no copying has started, write nul. Otherwise write progress.
+         */
+        if (F_ISSET(live_restore, WT_LIVE_RESTORE_COMPLETE))
+	    continue;
+	else if (live_restore->extents == NULL)
+            WT_ERR(__wt_logop_backup_id_pack(session, logrec, i, live_restore->fileid, &nul));
+        else {
+	    /* Create the string cookie for the current version of the extent list. */
+	    WT_ERR(__wt_live_restore_addr(session, live_restore, &fmt));
+            WT_ERR(__wt_logop_backup_id_pack(session, logrec, i, live_restore->fileid, fmt));
+	}
+    }
+    WT_ERR(__wt_log_write(session, logrec, NULL, 0));
+err:
+    __wt_logrec_free(session, &logrec);
+    return (ret);
+}
+
 /*
  * __wti_log_system_prevlsn --
  *     Write a system log record for the previous LSN.
diff --git a/src/txn/txn_recover.c b/src/txn/txn_recover.c
index bead53f405..32356855ba 100644
--- a/src/txn/txn_recover.c
+++ b/src/txn/txn_recover.c
@@ -137,6 +137,23 @@ __txn_backup_post_recovery(WT_RECOVERY *r)
     return;
 }
 
+/*
+ * __txn_system_live_restore --
+ *     Apply a system record live restore record during recovery.
+ */
+__txn_system_live_restore(WT_SESSION_IMPL *session, const uint8_t **pp, const uint8_t *end)
+{
+    WT_CONNECTION_IMPL *conn;
+    WT_DECL_RET;
+    uint32_t fileid, i;
+    const char *t_cookie;
+
+    conn = S2C(session);
+    WT_RET(__wt_logop_live_restore_unpack(session, pp, end, &i, &fileid, &cookie));
+    WT_RET(__wt_live_restore_recover(sesison, i, fileid, cookie));
+    return (0);
+}
+
 /*
  * __txn_system_op_apply --
  *     Apply a system record during recovery.
@@ -166,6 +183,11 @@ __txn_system_op_apply(WT_RECOVERY *r, WT_LSN *lsnp, const uint8_t **pp, const ui
     /* Right now the only system record we care about is the backup id. Skip anything else. */
     WT_ERR(__wt_logop_read(session, pp, end, &optype, &opsize));
     end = *pp + opsize;
+
+    /* XXX Refactor but this hacked code is just for illustrating the idea. */
+    if (optype == WT_LOGOP_LIVE_RESTORE)
+	WT_ERR(__txn_system_live_restore(session, pp, end));
+
     /* If it is not a backup id system operation type, we're done. */
     if (optype != WT_LOGOP_BACKUP_ID) {
         *pp += opsize;
