linux usb init,復制Linux liveUSB導致init.d腳本出錯 - 不可能..?

請發表您的想法或想出的任何想法。我很想知道別人在想什么。

整體問題

當我安裝一個簡單的Java應用程序(我寫的)通過/etc/init.d/在啟動(在后臺)運行時,它適用于我明確安裝它的liveUSB。當我制作該棒的副本時,它永遠不會成功啟動。在引導liveUSB副本時,當liveUSB引導進程到達我的腳本時,Java應用程序將始終掛起。我的腳本確實完成了它應該做的事情,甚至每5分鐘一次,并將繼續運行,直到你關閉機器。

我的腳本阻止了其他一切

什么都沒有超出我的腳本

你無法取消我的腳本

沒有GUI

您可以看到的唯一文本是我的腳本輸出的命令行

設置&測試 - 一切順利 :)

我有一個帶有3個分區的Linux liveUSB。加載簡單的標準Xubuntu映像。

sda1> 2GB存儲空間

sda2> 2gb系統

sda3>剩下的gb for casper

我創建了一個簡單的Java應用程序,它在啟動時在后臺運行。為了達到這個目的,我遵循了以下步驟:

將java應用程序編譯成類

在/ home / user / folder /中放置類文件

將我的startup.sh腳本復制到/etc/init.d/

在/etc/init.d/里面 鍵入“update-rc.d startup.sh start 20 2 5。stop 20 0 1 6。”

此更新的運行級別成功

現在我可以重啟/重啟/關閉任何操作,一切運行完美!

復制 - 這里變得棘手!

在創建此棒的副本時,我按照以下步驟操作:

裝載sda2 將該文件夾中的所有內容復制到/ home / user / Desktop / tmp-system /

裝載sda3 將該文件夾中的所有內容復制到/ home / user / Desktop / tmp-casper /

進入/ home / user / Desktop / tmp-system / 輸入“tar -cvf system.tar”。

進入/ home / user / Desktop / tmp-casper / 輸入“tar -cvf casper.tar”。

卸除 SDA2

sda3的

插入空USB(例如sdb) 設置分區(與您要復制的大小寫相同)

解開分區 tar -xvf system.tar ...進入sdb2

tar -xvf casper.tar ...進入sdb3

測試 - 這里一切都出錯了!

將新創建的liveUSB插入計算機

從USB啟動

一切都開始好了

我寫的Java應用程序被觸發了 啟動過程永遠掛起

沒有cmd提示可用

沒有GUI可用

好像線程正在運行(它是!輸出可以每5分鐘查看一次 - 這正是應該的樣子)

解決方案嘗試&陷阱

1

我可以掛載復制的liveUSB,編輯startup.sh以不啟動我的Java應用程序,它仍然無法啟動(就像我懷疑的那樣?)。

2

如果我使用“dd if = sda of = sdb”,liveUSB的副本將完全正常工作。然而,這不是可接受的解決方案。如果我要將帶有dd的16gb棒復制到64gb棒上,那么將64gb棒變成16gb棒。這也會使更改每個分區中需要更改的值變得更加困難。

3

測試了startup.sh和Java應用程序本身的許多變體。所有這些都產生相同的錯誤。

4

我用來復制的方法適用于其他形式的應用程序,文件或其他任何形式。

我還想嘗試避免使用任何其他庫或程序來幫助運行Java應用程序。

6

我還裝了sda2& sdb2使用cp將所有內容直接從一個復制到另一個,然后對sda3& sdb3。這會產生相同的錯誤。

其他要點

sda3分區使用cryptsetup加密

system.tar中有2個文件(將是sdb2,來自sda2),在寫入USB后會有一個值發生變化。 這兩個值在過去沒有引起任何問題,并且每次創建新的liveUSB時都會更改

casper.tar中有1個文件(將是sdb3,來自sda3),在寫入USB后會有一個值發生變化。 此值在過去沒有引起任何問題,并且每次創建新的liveUSB時都會更改。

校驗和測試過程

原始的實時USB映像

工作liveUSB> SDA

空usb> SDB

腳步:

裝載,復制和安裝校驗和sda2 輸入“mount / dev / sda2 / media / sda2”

鍵入“tar -C / media / sda2 -cvf~ / Desktop / system.tar”。

輸入“find.-type f -exec sha1sum {}';' > /tmp/sda2_checksum.txt“

輸入“umount / media / sda2”

裝載,復制和安裝校驗和sda3 輸入“mount / dev / sda3 / media / sda3”

輸入“tar -C / media / sda3 -cvf~ / Desktop / casper.tar”。

輸入“find.-type f -exec sha1sum {}';' > /tmp/sda3_checksum.txt“

輸入“umount / media / sda3”

為sdb創建分區

裝載,寫入&校驗和sdb2 輸入“mount / dev / sdb2 / media / sdb2”

鍵入“tar -C / media / sdb2 -xvf~ / Desktop / system.tar”

輸入“find.-type f -exec sha1sum {}';' > /tmp/sdb2_checksum.txt“

輸入“umount / media / sdb2”

裝載,寫入&校驗和sdb3 輸入“mount / dev / sdb3 / media / sdb3”

輸入“tar -C / media / sdb3 -xvf~ / Desktop / casper.tar”

輸入“find.-type f -exec sha1sum {}';' > /tmp/sdb3_checksum.txt“

輸入“umount / media / sdb3”

比較校驗和 sort /tmp/sda2_checksum.txt -o /tmp/sda2_checksum.txt.sort

sort /tmp/sda3_checksum.txt -o /tmp/sda3_checksum.txt.sort

sort /tmp/sdb2_checksum.txt -o /tmp/sdb2_checksum.txt.sort

sort /tmp/sdb3_checksum.txt -o /tmp/sdb3_checksum.txt.sort

結果

sda2& sdb2

輸入“diff sda2_checksum.txt.sort sdb2_checksum.txt.sort”

45d44

< 2ddf9802c9c15ac6e4575cc9de32e3530eae6b7d ./efi/boot/grub.cfg

82d80

< 59bb2775a8e7e499e0590b7b8c2492eb250fb7d8 ./syslinux/txt.cfg

154a153

> ae6c127713e01fc5fb4a2e4e28f6bbddc6bd6af5 ./efi/boot/grub.cfg

158a158

> b78090b66b4e3fa04ca9d466ee78c9060adf744e ./syslinux/txt.cfg

這兩個文件包含每個被更改的值。其他一切都是一樣的。結果正是它們應該是的。

sda3&amp; sdb3

輸入“diff sda3_checksum.txt.sort sdb3_checksum.txt.sort”

相同 - 請記住這是原始的liveUSB圖像。

我將在下一節中介紹進一步的比較結果。

下一步 - 又名行動計劃

從liveUSB映像開始,不需要運行腳本。

步驟1 - 成功/失敗?

成功 - 校驗和匹配

將liveUSB上的java從6更新為7

重新創建tar

從tar創建新的liveUSB

測試liveUSB

第2步 - 成功/失敗?

成功 - 校驗和匹配

創建/ home / user / folder /

將java應用程序的類文件復制到/ home / user / folder /

重新創建tar

從tar創建新的liveUSB

測試liveUSB

第3步 - 成功/失敗?

成功 - 校驗和匹配

將startup.sh添加到/etc/init.d/

不調用update-rc.d

重新創建tar

從tar創建新的liveUSB

測試liveUSB

第4步 - 成功/失敗?

成功 - 校驗和匹配

(我以前從未成功實現過這一點) - 但是需要編寫的值尚未插入到casper(sda3)分區中。

輸入“update-rc.d startup.sh start 21 2 5”。

重新創建tar

從tar創建新的liveUSB

測試liveUSB

第5步 - 成功/失敗?

成功 - 校驗和匹配

我不敢相信這有效!這讓我想到......(以一種很好的方式說出來)為什么這個世界以前不起作用?

- 巧妙的是版本-13有效。

引導liveUSB

在創建tar之前插入要在casper(sda3)中重寫的值 從liveUSB運行時

編輯/home/user/folder/config.properties中的配置文件

關閉liveUSB

重新創建tar

從tar創建新的liveUSB

測試liveUSB

圖片完成!!

我還沒完成這個!

*寫入usb的過程從未改變過。

為什么之前不起作用?

焦油方法? - 只是稍有變化...... 來自“tar -cvf casper.tar”。

要“tar -C / media / sda3 / -cvf~/ Desktop / casper.tar。

這些線條沒有完成同樣的事情嗎?

我將在不久的將來對此進行測試。 - 我懷疑沒有區別。

將程序分解為單獨的步驟? 之前: 根據NEXT STEPS - 又名行動計劃,我將在制作新圖像之前完成所有這些步驟。

后: 完全遵循了下一步 - 即行動計劃

這可能是區別嗎?

我將在不久的將來對此進行測試。

可以從casper(sda3)分區中的/ home /目錄中刪除大(或小)文件會導致某種損壞嗎? 我不知道..?

我將在不久的將來對此進行測試。

進一步測試 - 我想要我的答案!

從原始的liveUSB圖像開始。

將liveUSB上的java從6更新為7

創建/ home / user / folder /

將java應用程序的類文件復制到/ home / user / folder /

將startup.sh添加到/etc/init.d/

輸入“update-rc.d startup.sh start 21 2 5”。

編輯/home/user/folder/config.properties中的配置文件

這一次一步一步。 - 它會起作用嗎?

測試1 - 成功/失敗?

失敗!

老焦油方法

測試2 - 成功/失敗?

老焦油方法

刪除/ boot /中生成的文件 當寫入casper(sda3)分區時,我的腳本創建此文件,僅包含用于驗證的id,對啟動過程沒有影響。

測試3 - 成功/失敗?

新焦油方法

測試4 - 成功/失敗?

新焦油方法

刪除/ boot /中生成的文件 當寫入casper(sda3)分區時,我的腳本創建此文件,僅包含用于驗證的id,對啟動過程沒有影響。

結果

我將按此順序進行測試:

測試1 - &gt;試驗3 - &gt;測試4 - &gt;測試2

如果測試1工作......我會跳出窗外!

- 我不知道為什么它現在會起作用,因為我已經多次測試過并且每次都會產生不成功的靴子。

- 也許cp或tar進程以某種方式被破壞了。

什么時候 測試1失敗:

如果測試3工作......

- tar方法導致錯誤。

- 我不明白舊tar方法與新tar方法有什么不對。

TBC ......

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/395499.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/395499.shtml
英文地址,請注明出處:http://en.pswp.cn/news/395499.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

最小費用最大流模版

#include <iostream> #include <cstring> #include <cstdio> #include <queue> #include <algorithm>using namespace std;const int MAXN10100; const int MAXM40010; const int INF0x3f3f3f3f;struct Edge      //cost代表單位流量流過該…

fpga中的slack_是否想減少部署過程的恐怖程度? 在Slack中構建ChatOps。

fpga中的slackby Rick Mak麥瑞克(Rick Mak) 是否想減少部署過程的恐怖程度&#xff1f; 在Slack中構建ChatOps。 (Want to make the deployment process less scary? Build ChatOps in Slack.) In a company that makes mobile and web products, developers shouldn’t be t…

位運算-查找數組中唯一成對的數

基礎實例一&#xff1a;使用位運算判斷數的奇偶性 實例代碼&#xff1a; public class Test {public static void main(String[] args) {System.out.println(isOdd(49));System.out.println(isOdd(50));}// 與運算public static boolean isOdd(int i){return (i & 1) ! 0;…

Docker實踐:Cannot connect to the Docker daemon.

Docker實踐&#xff1a;Cannot connect to the Docker daemon.查看docker daemon是否在運行 [rootlocalhost openec]# ps aux | grep dockerroot 3030 0.0 0.0 112656 984 pts/0 S 16:20 0:00 grep --colorauto docker啟動docker[rootlocalhost openec]# ser…

linux虛擬終端時間短,使用Screen創建虛擬終端避免Linux遠程斷線

維護Linux的ssh工具在使用中&#xff0c;一旦遇到網絡中斷&#xff0c;則當前的shell就會自動關閉當前的工作進度就會丟失&#xff0c;這對于遠程升級等比較耗費時間的工作是非常不利的對于遠程調適代碼也是很不可靠不安全的為此&#xff0c;可以使用screen這個工具來解決這個問…

中國第一軟件開發_我第一次開發企業軟件中學到的知識

中國第一軟件開發In this article, I’ll share ten lessons I learned from my first project as a self-taught software developer. I was working for a consulting company at the time, and my official title was Software Engineer. The project I worked on was a web…

react-native-Cocoapods-Swift-Project

https://reactnative.cn/docs/integration-with-existing-apps/ 1、創建一個xcode工程&#xff0c;single View就行&#xff0c;項目語言選擇swift&#xff0c;oc的直接生成就行不用這么麻煩。 2、把跟目錄上創建 node的package.json,執行命令 npm init npm install react-nati…

用shell或者python寫出各種圖形

首先是shell等邊三角形[roothxy my_script]# sh ff.sh num:6************************* *********** [roothxy my_script]# cat ff.sh #!/bin/bash ######################################################################### # File Name: ff.sh # Author: huxianyong # mai…

cfdiv2/c/找規律

題目連接 £&#xff1a;若n<4&#xff0c;NO&#xff1b; £&#xff1a;若n4,特判&#xff0c;n5&#xff0c;特判。 £&#xff1a;若n>6,用2-4組成24&#xff0c;1和5和6組成零&#xff0c;即可。 #include <set> #include <map> #includ…

linux lcd顯示流程,求助 armlinux中實現lcd顯示

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓/* for (bufIdx0; bufIdx < NUM_DISPLAY_BUFS-1; bufIdx) {fbp[bufIdx1] fbp[bufIdx] displaySize;}*/for(bufIdx0;bufIdx{buf(unsigned int *)fbp;for (i0; i < displaySize / sizeof(unsigned int); i) {buf[i] UYVY_BL…

android引入開源庫_為好目錄引入開源:通過代碼幫助公益組織

android引入開源庫by Michael D. Johnson邁克爾約翰遜(Michael D.Johnson) 為好目錄引入開源&#xff1a;通過代碼幫助公益組織 (Introducing the Open Source for Good Directory: Help Nonprofits with Code) A few months ago, we asked 20,000 people why they were learn…

第二階段站立會議08

站立會議內容&#xff1a; 大家準備繼續將代碼進行融合&#xff0c;進行測試對一些功能進行優化。 1、會議照片&#xff1a; 2、任務展板&#xff1a; 3、燃盡圖&#xff1a; 轉載于:https://www.cnblogs.com/smcoder/p/7002539.html

ionic view 視圖

ionic view 方法 $ionicView.loaded視圖已經被加載了。這事件只發生一次當視圖被創建并添加到Dom中。當跳出頁面并且被緩存了的話&#xff0c;再次訪問這個頁面時這個時間將不會被激活。Loaded事件是個好方式讓你為這個視圖設置你的代碼&#xff1b; 然而&#xff0c;他并不是…

ios開發 mvp實踐_實踐中開發人員的工作流程-我們如何在30天內建立??MVP

ios開發 mvp實踐by Lna Faure萊娜福雷(LnaFaure) 實踐中開發人員的工作流程-我們如何在30天內建立??MVP (The developer’s workflow in practice — how we built our MVP in 30 days) As a web developer, I often get to start projects from scratch and make decisions…

linux智能電壓表設計與實現,畢業論文 智能數字電壓表設計.doc

畢業論文畢業論文智能數字電壓表設計智能數字電壓表設計- PAGE I -摘要隨著微電子技術和計算機技術的迅速發展&#xff0c;特別是單片機的出現和發展&#xff0c;使傳統的電子測量儀器在原理、功能、精度及自動化水平等方面發生了巨大的變化&#xff0c;形成一種新一代的測量儀…

git——學習筆記(三)分支管理

一、創建、合并分支 每次提交&#xff0c;git都往后走一格&#xff0c;串成一跳時間線&#xff0c;head指向的是分支&#xff0c;分支指向提交。master是主分支&#xff0c;dev是另一條分支&#xff0c;分支就像指針一樣&#xff0c;合并、刪除分支時&#xff0c;修改的都是指針…

Redis 它是什么?它用來做什么?它的優勢與短板如何?

閱讀目的&#xff1a; 對什么是內存型數據庫有概念性的認知。?Redis 是什么&#xff1f; 通常而言目前的數據庫分類有幾種&#xff0c;包括 SQL/NSQL,&#xff0c;關系數據庫&#xff0c;鍵值數據庫等等 等&#xff0c;分類的標準也不以&#xff0c;Redis本質上也是一種鍵值…

阿里巴巴是如何打通 CMDB,實現就近訪問的?

CMDB在企業中&#xff0c;一般用于存放與機器設備、應用、服務等相關的元數據。當企業的機器及應用達到一定規模后就需要這樣一個系統來存儲和管理它們的元數據。有一些廣泛使用的屬性&#xff0c;例如機器的IP、主機名、機房、應用、region等&#xff0c;這些數據一般會在機器…

我們分析了成千上萬的編程訪談。 這就是我們學到的東西。

by Aline Lerner通過艾琳勒納(Aline Lerner) 我們分析了成千上萬的編程訪談。 這就是我們學到的東西。 (We analyzed thousands of coding interviews. Here’s what we learned.) Note: I wrote most of the words in this post, but the legendary Dave Holtz did the heavy…

Java 9 新功能之 HTTP2 和 REPL

對Java 9的炒作將不再局限于模塊化&#xff08;modularity&#xff09;&#xff0c;Java 9正在搜羅大量額外的功能模塊&#xff0c;這些功能模塊正作為Java增強提案&#xff08;JEP&#xff09;提交&#xff0c;并在OpenJDK (Java SE的參考實現項目&#xff09;中實現。 在這篇…