Bitcoin-Kerndatenverzeichnis über NFS

Ich werde einen Bitcoin-Core auf einem Linux-Server (Ubuntu 20.04) ausführen. Ich habe nicht genug Speicherplatz, um Blockchain-Daten zu speichern. Daher möchte ich die Daten über einen NFS-Server (CentOS Release 6.10) speichern. Ich erhalte jedoch eine Fehlermeldung, wenn ich den -datadirauf den freigegebenen Ordner einstelle.

Der Inhalt der Datei auf dem NFS-Server (ich habe die Konfiguration von hier/etc/exports aus gesehen ):

/home/storage/  BITCOIN.CORE_IP(rw,sync,no_root_squash,no_subtree_check)

Ich habe das freigegebene Remote-Verzeichnis auf dem Ubuntu 20.04-Linux-Server mit dem folgenden Befehl gemountet:

mount NFS_SERVER_IP:/home/storage/ /root/blockchain/

Alles funktioniert einwandfrei, und der Bericht zur Speicherplatznutzung des Dateisystems lautet: ( df -h)

Filesystem                   Size  Used Avail Use% Mounted on
NFS_SERVER_IP:/home/storage/  1.0T  682M  1.0T   1% /root/blockchain

Nachdem Sie den folgenden Befehl ausgeführt haben, um das Datenverzeichnis in das freigegebene Verzeichnis zu ändern:

./bitcoin-0.20.0/bin/bitcoind -datadir=/root/blockchain

Ich bekomme folgenden Fehler:

Error: Cannot obtain a lock on data directory /root/blockchain. Bitcoin Core is probably already running.

Ich sollte beachten, dass das gemeinsame Verzeichnis leer ist, bevor Bitcoin ausgeführt wird, und danach eine leere Datei mit dem Namen .lock. Außerdem, wenn ich das -datadirauf einen beliebigen lokalen Ordner setze, wird es keinen Fehler zurückgeben!

Danke.

Führen Sie Bitcoin unter einem Benutzer aus, der die Berechtigung hat, in dieses Verzeichnis zu schreiben?
@RaghavSood Ich führe den folgenden Befehl aus, um zu sehen, als welcher Benutzer bitcoind ausgeführt wird: ` ps -eo user,group,comm |egrep 'bitcoind' |awk '{print "Bitcoin user: " $1}' ` das Ergebnis ist: ` Bitcoin Benutzer: root `. Ich kann mkdir und unter dem Root-Benutzer berühren.
Möglicherweise läuft eine andere Bitcoin-Instanz auf demselben Computer oder auf einem anderen Computer, der mit demselben freigegebenen Laufwerk verbunden ist. Versuchen Sie, alle Bitcoin-Instanzen zu stoppen, die .lockDatei zu löschen (falls sie noch vorhanden ist) und sie dann erneut zu starten
@RaghavSood Ich habe das mehrmals versucht, aber nichts ändert sich :((
Netzwerkdateisysteme unterstützen häufig nicht die gleichen Sperrelemente, die von lokalen Dateisystemen erwartet werden.

Antworten (1)

Aus meiner Sicht können wir LevelDB-Indexdateien wie Chainstate usw. nicht auf einen externen langsamen Speicher verschieben.

Gemäß diesem Link sollten wir nur die Dateien blkxxxxx.datund revxxxxx.datauf einen externen Speicher verschieben. Diese Dateien sind ${datadir}/blocks/standardmäßig enthalten. Da das indexVerzeichnis ( ${datadir}/blocks/index) LevelDB-Indexdateien mit hoher E/A-Frequenz enthält, erhöht das Verschieben auf einen externen Speicher die anfängliche Blockchain-Synchronisierungszeit.

Gehen Sie also folgendermaßen vor (ich habe die Anweisungen des Links befolgt ):

  1. Bitcoin ausführen.

Lassen Sie es einige Minuten lang laufen oder lange genug, bis es mit der Synchronisierung begonnen hat [ref]

  1. Töten Sie dann die Bitcoin.

  2. Verschieben Sie als Nächstes den Ordner „index“ eine Ebene nach oben (damit er auf dem lokalen Speicher verbleiben kann):

mv -f ~/.bitcoin/blocks/index ~/.bitcoin/
  1. Verschieben Sie den Blocks-Ordner in das freigegebene Verzeichnis:
mv -f ~/.bitcoin/blocks ~/blockchain/
  1. Erstellen Sie einen symbolischen (weichen) Link zum lokalen Indexverzeichnis im Blockverzeichnis im gemeinsam genutzten Speicher ( verwenden Sie den absoluten Pfad ):
ln -s /root/.bitcoin/index /root/blockchain/blocks/index
  1. Erstellen Sie nun einen symbolischen (weichen) Link zum Blockverzeichnis bei .bitcoin im lokalen Speicher ( verwenden Sie erneut den absoluten Pfad ):
ln -s /root/blockchain/blocks/ /root/.bitcoin/blocks